From 2311f763b671b71279e80e187290b3b0677431d4 Mon Sep 17 00:00:00 2001 From: sunqiang1 Date: Mon, 24 Jun 2024 18:48:49 +0800 Subject: [PATCH] [feat] slice unique as origin order --- pkg/utils/xslice/float.go | 16 ++--- pkg/utils/xslice/int.go | 140 ++++++++++++++++++------------------- pkg/utils/xslice/string.go | 18 ++--- 3 files changed, 87 insertions(+), 87 deletions(-) diff --git a/pkg/utils/xslice/float.go b/pkg/utils/xslice/float.go index deb7d1c..d94ac8a 100644 --- a/pkg/utils/xslice/float.go +++ b/pkg/utils/xslice/float.go @@ -87,14 +87,14 @@ func IntersectFloat64(s1 []float64, s2 []float64) []float64 { // UniqueFloat64 Removes duplicate values from slice func UniqueFloat64(s1 []float64) []float64 { - unique := make(map[float64]interface{}) + unique := make(map[float64]struct{}) + ret := make([]float64, 0, len(s1)) for _, val := range s1 { - unique[val] = nil - } - - ret := make([]float64, 0, len(unique)) - for key := range unique { - ret = append(ret, key) + if _, ok := unique[val]; ok { + continue + } + unique[val] = struct{}{} + ret = append(ret, val) } return ret } @@ -116,7 +116,7 @@ func MergeFloat64(s1 []float64, s2 ...[]float64) []float64 { return ret } -//SortFloat64 sort float64 slice asc +// SortFloat64 sort float64 slice asc func SortFloat64(s []float64) []float64 { sort.Sort(sort.Float64Slice(s)) return s diff --git a/pkg/utils/xslice/int.go b/pkg/utils/xslice/int.go index 0349b83..e4f3f6b 100644 --- a/pkg/utils/xslice/int.go +++ b/pkg/utils/xslice/int.go @@ -85,14 +85,14 @@ func IntersectInt8(s1 []int8, s2 []int8) []int8 { // UniqueInt8 Removes duplicate values from slice func UniqueInt8(s1 []int8) []int8 { - unique := make(map[int8]interface{}) + unique := make(map[int8]struct{}) + ret := make([]int8, 0, len(s1)) for _, val := range s1 { - unique[val] = nil - } - - ret := make([]int8, 0, len(unique)) - for key := range unique { - ret = append(ret, key) + if _, ok := unique[val]; ok { + continue + } + unique[val] = struct{}{} + ret = append(ret, val) } return ret } @@ -192,14 +192,14 @@ func IntersectUint8(s1 []uint8, s2 []uint8) []uint8 { // UniqueUint8 Removes duplicate values from slice func UniqueUint8(s1 []uint8) []uint8 { - unique := make(map[uint8]interface{}) + unique := make(map[uint8]struct{}) + ret := make([]uint8, 0, len(s1)) for _, val := range s1 { - unique[val] = nil - } - - ret := make([]uint8, 0, len(unique)) - for key := range unique { - ret = append(ret, key) + if _, ok := unique[val]; ok { + continue + } + unique[val] = struct{}{} + ret = append(ret, val) } return ret } @@ -299,14 +299,14 @@ func IntersectInt16(s1 []int16, s2 []int16) []int16 { // UniqueInt16 Removes duplicate values from slice func UniqueInt16(s1 []int16) []int16 { - unique := make(map[int16]interface{}) + unique := make(map[int16]struct{}) + ret := make([]int16, 0, len(s1)) for _, val := range s1 { - unique[val] = nil - } - - ret := make([]int16, 0, len(unique)) - for key := range unique { - ret = append(ret, key) + if _, ok := unique[val]; ok { + continue + } + unique[val] = struct{}{} + ret = append(ret, val) } return ret } @@ -406,14 +406,14 @@ func IntersectUint16(s1 []uint16, s2 []uint16) []uint16 { // UniqueUint16 Removes duplicate values from slice func UniqueUint16(s1 []uint16) []uint16 { - unique := make(map[uint16]interface{}) + unique := make(map[uint16]struct{}) + ret := make([]uint16, 0, len(s1)) for _, val := range s1 { - unique[val] = nil - } - - ret := make([]uint16, 0, len(unique)) - for key := range unique { - ret = append(ret, key) + if _, ok := unique[val]; ok { + continue + } + unique[val] = struct{}{} + ret = append(ret, val) } return ret } @@ -513,14 +513,14 @@ func IntersectInt(s1 []int, s2 []int) []int { // UniqueInt Removes duplicate values from slice func UniqueInt(s1 []int) []int { - unique := make(map[int]interface{}) + unique := make(map[int]struct{}) + ret := make([]int, 0, len(s1)) for _, val := range s1 { - unique[val] = nil - } - - ret := make([]int, 0, len(unique)) - for key := range unique { - ret = append(ret, key) + if _, ok := unique[val]; ok { + continue + } + unique[val] = struct{}{} + ret = append(ret, val) } return ret } @@ -613,14 +613,14 @@ func IntersectUint(s1 []uint, s2 []uint) []uint { // UniqueUint Removes duplicate values from slice func UniqueUint(s1 []uint) []uint { - unique := make(map[uint]interface{}) + unique := make(map[uint]struct{}) + ret := make([]uint, 0, len(s1)) for _, val := range s1 { - unique[val] = nil - } - - ret := make([]uint, 0, len(unique)) - for key := range unique { - ret = append(ret, key) + if _, ok := unique[val]; ok { + continue + } + unique[val] = struct{}{} + ret = append(ret, val) } return ret } @@ -720,14 +720,14 @@ func IntersectInt32(s1 []int32, s2 []int32) []int32 { // UniqueInt32 Removes duplicate values from slice func UniqueInt32(s1 []int32) []int32 { - unique := make(map[int32]interface{}) + unique := make(map[int32]struct{}) + ret := make([]int32, 0, len(s1)) for _, val := range s1 { - unique[val] = nil - } - - ret := make([]int32, 0, len(unique)) - for key := range unique { - ret = append(ret, key) + if _, ok := unique[val]; ok { + continue + } + unique[val] = struct{}{} + ret = append(ret, val) } return ret } @@ -827,14 +827,14 @@ func IntersectUint32(s1 []uint32, s2 []uint32) []uint32 { // UniqueUint32 Removes duplicate values from slice func UniqueUint32(s1 []uint32) []uint32 { - unique := make(map[uint32]interface{}) + unique := make(map[uint32]struct{}) + ret := make([]uint32, 0, len(s1)) for _, val := range s1 { - unique[val] = nil - } - - ret := make([]uint32, 0, len(unique)) - for key := range unique { - ret = append(ret, key) + if _, ok := unique[val]; ok { + continue + } + unique[val] = struct{}{} + ret = append(ret, val) } return ret } @@ -934,14 +934,14 @@ func IntersectInt64(s1 []int64, s2 []int64) []int64 { // UniqueInt64 Removes duplicate values from slice func UniqueInt64(s1 []int64) []int64 { - unique := make(map[int64]interface{}) + unique := make(map[int64]struct{}) + ret := make([]int64, 0, len(s1)) for _, val := range s1 { - unique[val] = nil - } - - ret := make([]int64, 0, len(unique)) - for key := range unique { - ret = append(ret, key) + if _, ok := unique[val]; ok { + continue + } + unique[val] = struct{}{} + ret = append(ret, val) } return ret } @@ -1041,14 +1041,14 @@ func IntersectUint64(s1 []uint64, s2 []uint64) []uint64 { // UniqueUint64 Removes duplicate values from slice func UniqueUint64(s1 []uint64) []uint64 { - unique := make(map[uint64]interface{}) + unique := make(map[uint64]struct{}) + ret := make([]uint64, 0, len(s1)) for _, val := range s1 { - unique[val] = nil - } - - ret := make([]uint64, 0, len(unique)) - for key := range unique { - ret = append(ret, key) + if _, ok := unique[val]; ok { + continue + } + unique[val] = struct{}{} + ret = append(ret, val) } return ret } diff --git a/pkg/utils/xslice/string.go b/pkg/utils/xslice/string.go index b360738..7a63278 100644 --- a/pkg/utils/xslice/string.go +++ b/pkg/utils/xslice/string.go @@ -87,19 +87,19 @@ func IntersectString(s1 []string, s2 []string) []string { // UniqueString Removes duplicate values from slice func UniqueString(s1 []string) []string { - unique := make(map[string]interface{}) + unique := make(map[string]struct{}) + ret := make([]string, 0, len(s1)) for _, val := range s1 { - unique[val] = nil - } - - ret := make([]string, 0, len(unique)) - for key := range unique { - ret = append(ret, key) + if _, ok := unique[val]; ok { + continue + } + unique[val] = struct{}{} + ret = append(ret, val) } return ret } -//MergeString merge one or more arrays +// MergeString merge one or more arrays func MergeString(s1 []string, s2 ...[]string) []string { if len(s2) == 0 { return s1 @@ -116,7 +116,7 @@ func MergeString(s1 []string, s2 ...[]string) []string { return ret } -//SortString sort string slice asc +// SortString sort string slice asc func SortString(s []string) []string { sort.Sort(sort.StringSlice(s)) return s