move sort.Uniq to dedicated package
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
		
							
								
								
									
										40
									
								
								util/sort/sort.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								util/sort/sort.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| package sort | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"sort" | ||||
| ) | ||||
|  | ||||
| // sort labels alphabeticaly by label name | ||||
| type byKey []interface{} | ||||
|  | ||||
| func (k byKey) Len() int           { return len(k) / 2 } | ||||
| func (k byKey) Less(i, j int) bool { return fmt.Sprintf("%s", k[i*2]) < fmt.Sprintf("%s", k[j*2]) } | ||||
| func (k byKey) Swap(i, j int) { | ||||
| 	k[i*2], k[j*2] = k[j*2], k[i*2] | ||||
| 	k[i*2+1], k[j*2+1] = k[j*2+1], k[i*2+1] | ||||
| } | ||||
|  | ||||
| func Uniq(labels []interface{}) []interface{} { | ||||
| 	if len(labels)%2 == 1 { | ||||
| 		labels = labels[:len(labels)-1] | ||||
| 	} | ||||
|  | ||||
| 	if len(labels) > 2 { | ||||
| 		sort.Sort(byKey(labels)) | ||||
|  | ||||
| 		idx := 0 | ||||
| 		for { | ||||
| 			if labels[idx] == labels[idx+2] { | ||||
| 				copy(labels[idx:], labels[idx+2:]) | ||||
| 				labels = labels[:len(labels)-2] | ||||
| 			} else { | ||||
| 				idx += 2 | ||||
| 			} | ||||
| 			if idx+2 >= len(labels) { | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return labels | ||||
| } | ||||
		Reference in New Issue
	
	Block a user