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