mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-14 17:52:28 +08:00
refactoring: reimplement the logic of Intersection
This commit is contained in:
@@ -1,51 +1,51 @@
|
|||||||
-----BEGIN rsa private key-----
|
-----BEGIN rsa private key-----
|
||||||
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
|
||||||
-----END rsa private key-----
|
-----END rsa private key-----
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
-----BEGIN rsa public key-----
|
-----BEGIN rsa public key-----
|
||||||
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAndYMNkKkKpiljieXZEVn
|
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxZGG6vSSETKwW7bxx7NA
|
||||||
izdndsLOD11062JZMEU3g0KZzJovygXnGoadrRxnukaMpDD1AzJdK4vT/jawJ/5f
|
1tXmNh+0AAsOmdwOyd77C/F7bmf3iacdzsdJgumWpBZLpo7Xdke/6NWbzizdbawb
|
||||||
c7ErTIDrm0eWGMgR9ggU3kas70JJKry6KmtvGAWxyL9DRV0JFXfOwtvwVJ2JN4Zd
|
BKkLH5vdZpEYJsbIx9vQYPRrAL1taRHpWwqC86aZHhJ8afo5KARkW8U1BB+MCfJ0
|
||||||
UQtrzJza0T5uVsM9fs0RmTi5Ga883mZ/w2Ed4LoZ089ZhF/+AqYBrb9qocxkIEyy
|
oGOgkpHPbbs7jRNhrUP52BPbdRUw7ZwwJHEseuAvw+nv80UmHdI5mrgKj//8r+cB
|
||||||
2oeZVG9y2lO5tIlN98ytAanrq6qsuHHW4MAG3mL7ocx5mikANNdWkiTFxxY6D1Pk
|
1JnErqJi0yTOgYwKqOPFcMoaCoyLRdMV8en1QZ7nY6KWF32K/OBGM8++lRsZGttF
|
||||||
OWk57RRns7CT43BwoUj3n8ThHN4c9thS/SB7A++RJ2sHQWfpPxzp4vNKw7SAOpcS
|
Thx3Zs54QU2GFgthH5rkMtucuZUXDN2k+QqV1XrSC/a+IDZ1zhx0+NUuExktOpOq
|
||||||
PhOrN1m1vl/JstQcksdbG+lpl/vqtnOB2QDCpS3jdKjgkpUlylb1Udx7qdQQtY5J
|
kvc4IslIOPAcBJ4MoUWShOy91rW34QSV2ZgD6VMTYMce6xpH4Oh680I4ZtewZiRd
|
||||||
b9/fiMlCbVT//3hGfJGb5gpz2jjw7SJOkih461eyz7xgS+on6FHXiIvbb0jdy2pj
|
BnQ4EADoxPbiBHfTQJfzUBtaZDXqOFNN+friCITTKice0dByDlCN85bL7et0hyIs
|
||||||
PAI2bVc4+53lCWlOKQ/zXvi1WOYjp9cuhccTy85M4cBU5MBH8kiW/RLJDSNmRuh8
|
FU1xi0SmFbt3IBFwsJf5B/aorLhZqwCIUFvf7EahOH51PlGr7M2ltZtpgHmFBzB0
|
||||||
dOyr/J+Q34878waVUAel/bhmh40BzxQ+2h8CJ/AjAPIQvOVXQi2eKFGiRk3cLwca
|
zYAoYOnDU1+avzVP5l9fObH4uLl8/fjeAr8pSB0drjaKf0Bj434aKrrftDyeGuMW
|
||||||
NE5DAv0csxeP8Yt5IuS+ms7qHTGRUzL9MgX767K4hd+9DJUO4XkNLietVDpyWFl4
|
pXhFu9rr/eXXUVqU/jBfHR+60m+MBK9h8efkqtVW3EqNVApsapRFo/LNNDAC9lCK
|
||||||
8DoqAzp0hvh7Fxt/SN17WCUCAwEAAQ==
|
WuFBjh0igdZNjSuatG9O9rMCAwEAAQ==
|
||||||
-----END rsa public key-----
|
-----END rsa public key-----
|
||||||
|
|||||||
@@ -921,36 +921,25 @@ func Merge[T any](slices ...[]T) []T {
|
|||||||
// Intersection creates a slice of unique elements that included by all slices.
|
// Intersection creates a slice of unique elements that included by all slices.
|
||||||
// Play: https://go.dev/play/p/anJXfB5wq_t
|
// Play: https://go.dev/play/p/anJXfB5wq_t
|
||||||
func Intersection[T comparable](slices ...[]T) []T {
|
func Intersection[T comparable](slices ...[]T) []T {
|
||||||
if len(slices) == 0 {
|
result := []T{}
|
||||||
return []T{}
|
elementCount := make(map[T]int)
|
||||||
}
|
|
||||||
if len(slices) == 1 {
|
|
||||||
return Unique(slices[0])
|
|
||||||
}
|
|
||||||
|
|
||||||
reducer := func(sliceA, sliceB []T) []T {
|
for _, slice := range slices {
|
||||||
hashMap := make(map[T]int)
|
seen := make(map[T]bool)
|
||||||
for _, v := range sliceA {
|
|
||||||
hashMap[v] = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
out := make([]T, 0)
|
for _, item := range slice {
|
||||||
for _, val := range sliceB {
|
if !seen[item] {
|
||||||
if v, ok := hashMap[val]; v == 1 && ok {
|
seen[item] = true
|
||||||
out = append(out, val)
|
elementCount[item]++
|
||||||
hashMap[val]++
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return out
|
|
||||||
}
|
}
|
||||||
|
|
||||||
result := reducer(slices[0], slices[1])
|
for _, item := range slices[0] {
|
||||||
|
if elementCount[item] == len(slices) {
|
||||||
reduceSlice := make([][]T, 2)
|
result = append(result, item)
|
||||||
for i := 2; i < len(slices); i++ {
|
elementCount[item] = 0
|
||||||
reduceSlice[0] = result
|
}
|
||||||
reduceSlice[1] = slices[i]
|
|
||||||
result = reducer(reduceSlice[0], reduceSlice[1])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|||||||
Reference in New Issue
Block a user