1
0
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:
dudaodong
2024-11-29 15:47:08 +08:00
parent 58a37b7e8d
commit 8f3ea60636
3 changed files with 74 additions and 85 deletions

View File

@@ -1,51 +1,51 @@
-----BEGIN rsa private key----- -----BEGIN rsa private key-----
MIIJKAIBAAKCAgEAndYMNkKkKpiljieXZEVnizdndsLOD11062JZMEU3g0KZzJov MIIJJwIBAAKCAgEAxZGG6vSSETKwW7bxx7NA1tXmNh+0AAsOmdwOyd77C/F7bmf3
ygXnGoadrRxnukaMpDD1AzJdK4vT/jawJ/5fc7ErTIDrm0eWGMgR9ggU3kas70JJ iacdzsdJgumWpBZLpo7Xdke/6NWbzizdbawbBKkLH5vdZpEYJsbIx9vQYPRrAL1t
Kry6KmtvGAWxyL9DRV0JFXfOwtvwVJ2JN4ZdUQtrzJza0T5uVsM9fs0RmTi5Ga88 aRHpWwqC86aZHhJ8afo5KARkW8U1BB+MCfJ0oGOgkpHPbbs7jRNhrUP52BPbdRUw
3mZ/w2Ed4LoZ089ZhF/+AqYBrb9qocxkIEyy2oeZVG9y2lO5tIlN98ytAanrq6qs 7ZwwJHEseuAvw+nv80UmHdI5mrgKj//8r+cB1JnErqJi0yTOgYwKqOPFcMoaCoyL
uHHW4MAG3mL7ocx5mikANNdWkiTFxxY6D1PkOWk57RRns7CT43BwoUj3n8ThHN4c RdMV8en1QZ7nY6KWF32K/OBGM8++lRsZGttFThx3Zs54QU2GFgthH5rkMtucuZUX
9thS/SB7A++RJ2sHQWfpPxzp4vNKw7SAOpcSPhOrN1m1vl/JstQcksdbG+lpl/vq DN2k+QqV1XrSC/a+IDZ1zhx0+NUuExktOpOqkvc4IslIOPAcBJ4MoUWShOy91rW3
tnOB2QDCpS3jdKjgkpUlylb1Udx7qdQQtY5Jb9/fiMlCbVT//3hGfJGb5gpz2jjw 4QSV2ZgD6VMTYMce6xpH4Oh680I4ZtewZiRdBnQ4EADoxPbiBHfTQJfzUBtaZDXq
7SJOkih461eyz7xgS+on6FHXiIvbb0jdy2pjPAI2bVc4+53lCWlOKQ/zXvi1WOYj OFNN+friCITTKice0dByDlCN85bL7et0hyIsFU1xi0SmFbt3IBFwsJf5B/aorLhZ
p9cuhccTy85M4cBU5MBH8kiW/RLJDSNmRuh8dOyr/J+Q34878waVUAel/bhmh40B qwCIUFvf7EahOH51PlGr7M2ltZtpgHmFBzB0zYAoYOnDU1+avzVP5l9fObH4uLl8
zxQ+2h8CJ/AjAPIQvOVXQi2eKFGiRk3cLwcaNE5DAv0csxeP8Yt5IuS+ms7qHTGR /fjeAr8pSB0drjaKf0Bj434aKrrftDyeGuMWpXhFu9rr/eXXUVqU/jBfHR+60m+M
UzL9MgX767K4hd+9DJUO4XkNLietVDpyWFl48DoqAzp0hvh7Fxt/SN17WCUCAwEA BK9h8efkqtVW3EqNVApsapRFo/LNNDAC9lCKWuFBjh0igdZNjSuatG9O9rMCAwEA
AQKCAgAao4a6HbNBcTP38xytEr2wFHDE7YoDs91I4Pd2mygMYlA85QUNzsM7id7Q AQKCAgAkwpkZ6nurG4VY60c9YwrzbkUxWODDCUukMR/HS+fmJv5SYqHaSO/w43+4
2ctz9/ZCu/SOTpDFCbuE20wN4/POPee16MhbE9D0a8gEQ0bqYPlNBF3+9Y1iHXHJ DgJrcYKN8RIB/gOlLOmaiRqCJ323dkSNkxC03tZhkKcXGL1C7Pdj4dsTq7OBrwkC
lyRzYjyDV3lyAx+FacN9NH11Pps/U3MlPI/94tCSmi8l2IyQ1K8A87+NNbV4j0qQ kML4p3PivB4aZgbOVHky1TPXPfeZSDA+VUcFIctIyoxoErfQDpHMzS6XZ3JFtZET
pDg5tHRCUEU5wzTjUzw3BJ0dinRhR6OMSacTzC+6lbXwDb5hWoFpHsw58RS4KBDA I9d/Wm29E+atscnqEchVVsoLaK4cgqfn3msI4lZSIF5zYj4AaHpD8DaRvV7d7iwm
teoMW8tmRmc/g9ybm9M5j7nK3njVa7oYFmqOPE4pg8+umPcaIwtvaNlwnAAdsr6w E4z2KvBGWqObvZcSWNsbHzmil53jlMRaqpwRen0yaNefa9B97gLRPP5W9H6Xn/KV
Yl2YTosR8ey+9y1OXYuPzkYaHWc5iQ8U8BKVfwxrRD3mIeTrZC7hRim+ucLkDtRN EA85DqX9lGSC/yR8kB3Mi+iwd31LGsxXWHwTZEtyMLGjNxhkFU122iCFGsVex8zn
HWNaMVlKeAgLBu015S6MsYHJvZI4gf4+fUHq/hTFOgr5x0XKHA/8KJueqnDwwAbm 2bWWQ1ANczA9gyAe8Frap2ydlZw5wiToaF4+82RnndQy0RSWWUXiKSrnZjqXDEOf
VNH2r34BnbvDaYwJspnbtacVoamCXf2AaRC+Dq+Ud119VnZzxDQAd6PfO9eYTmSm NDMXBM3STT2eE6xLgIFyV/1vll4/YXoJKU217Zg4zkZ7AFWpfGXzWtlZ63ku2Ek1
M2g57C4ASJrnmp2vZQEdulUXSbJX7iKVj/OPsOxlvRg0EK1tve2aE/Of19ql6eED CD8bupgTM9dLcC5vkgaiOSdSVClmgI3wr0Gbg4Swxl/DccpabOHc4/lEm59SuSXj
swNyf3pN/P9FEfXZpWqOHZRiWsurc7pL1FlncyLgDI4j0a00rvLzo4fWWbr1WD8T s4ZUh93dxoYvsNvzyPD0AdIhEp2xSofD6Q4qU4l5kBudIYS4xYXKVzwbbP5spixe
VG41N/yhKgCR9KW/PZqK2gk7nznU3tqPXd9UAZ/2QPN+F5TMAQKCAQEAzdhkReET 7qdbQnD9s+ufPjFBMRgU0FV25dyKVNCM6JlfwdYGkVDYSclDQQKCAQEA/a43eS/0
lsWyAJ6lkZDPv0lPsbx0mTu+H0Quygct/S3DhNXPDlGmzLH1HbyykFn7n2eKgM4w GGhASs4uM7P1iLMiDkFfsotJsPQ3klIv6m1XBjKFl4y5M0SbP9NBb0cPsReR4xCx
lSazsy4FZ6/tOofI9XsKKKIBXZYHW3DiOFSsXngtOm0bVQEd16KTivnKhzUj3aW+ vyxui4gAVhjc6HBj//zegLjdzg2aGZdc0zrYocaW5CHd/IyQyRv5JwbVWWUC+Y9f
l/exDfEqN14V8rpFTQXY52e6uUrNh2qc9J3UuHwcuQQmnn8uNssH37xGlC0EEDKb RlNEZB/WFzHbLjXaVDiVwiadURHVb0gr8LBJNp0CZ/poqQf3JwNLshVA79EE7aKv
qxEhG1t/BWhDKpxVjohapMeZrotdGMSMOow5tU/oJHlrOCGguumtIZXWHJtuD1Ke 2R2CKTFzv/GrePMZxoAH7U89qg7Nx9mmJfkC0DgTSem20ADdCDzivhFkYWRmd2k8
c/22QhmOCLj0E21d0/NloEy3/V1inAFN6J//gMI1If8wkuNT5GFm5l93YOgiPM3a 5E35d5ZCUz8YsDhaaIEi4MkRrC4wx8TJ/M9l0jWNNtoqqROhSdMQ40Hlc+azURWH
TkkyiGZLI3ttJQKCAQEAxEsVMof/8SB2qXsj/2ZUkEd0inPDK/WRFe5MIriqo2Dh 0jeVVw+iQYUBQwKCAQEAx1/4ZU+RzG6PiyImzfD30i972mhJk1KJ6m1K6WkklS6E
x7JYBiPYjfAJMBpOmKgNRwwnB1boV4T5T5BPrHdQvbp8r56LguISK51hM/WQEkZW r1GttarK/ZLdueOsHQ0+YsAz8HECWJluvlI1GoXwvtrQJ4uB2vAyaSb9mer96O4G
h/l9FJrWyL37cvjPeWlNwdRyc1KX4MnuQ6oYpzKpZ5AWdAIVlHPo4yGNlel7biTl +VjOhXBtLCKrE1Gir2ciUM/49etFe5phplxflmNKIZm/8RFSRtcMfM0NyIXvQKRL
Jyz3YshS+mvsIRoh7GhJjWpPXLm3iFQMRxBoTmvGviFnNptAGErvg6zv00rLZPFr j3rsbG6MofhPQe5dqV/e/KkgK0YTZjz9qlFiAUOQK5RtJ634QHa+27wygQ71KoIr
S64m1cPLxFmFPPo9ORdCdTIccopGtfyTYybefGl84j1LkC0l8IhdoXpqvBfO6I8m A/gfKTzo4Hvlt1ZIoVSc/wJI5q3jcTp3jecnE7ZeqZEq39ECSFK4wIp+BTV9dgDF
PuoaLaISJgB+7C2+IL3FlF6kaXb0HNRqX9DHlxPPAQKCAQEAwTGYIvG1FevkPaqo rqJfBv+T8WXPWlyWYL2PDaVjkcP+hnZyndhrxIjl0QKCAQATGzQCZKI11GRDPhQs
UG+uW6Tt1C3A7VRiAyxWEa0dX6LE/3ZAR/sgZrubB1bj7JFXlOtz1aIvfLz/KWtH wLkVeqht+m6CvAro0Pv+gUIqneGYDeYR6/9m5RvsSrT69Jcx91x9hZxdkbMhvzSH
DWLTbvykAqmBBlPOnkxCCXNwDliCEoQORujCH0zV+l2Oxn/csnuQduWpdS22khRH R4gb2ZsuhJUdjM7n3g5lLwlGv3/hb1ueAw79HnkpLHovfkxDV2BJ+4ppeYwFHoC5
gAGg7dgfVMPpKH51hJSNQ8wvFXLQhHmP56HasSVCdZCmijlFsKpzRtSIv8xq2ydL bn/bkyLGhRyCavYeTQGOSBlHH3/kJR8xRaLsWDU9MvpYh1FEvrFoVIB6Ecbj412c
lwKdD2/86LJXCJKBTY1lSeqmhgi33NDrWthOZjdBiEvq/zuG4gCLEnyDVO/JUE51 b09C5MxkLvBp5zX1wPeuva3N3ltf41lQj9G9CNOc8zkAp76vtygghkSXzWekoiSM
vQABq/4YcuXc+s8mW/h6pVqgCXWpMuqTPZ4ps6MCSLWWAx+UhnI4OAMoIhOXBuej sIvjedsVU+SUmZBDL5ds9F1iNRyuIGpqXzQnV9sl/EehVi059X479SstohIVZJAL
G+EqtQKCAQAGAJXBWc9FvExkmlNbd/GWB9lUcn3BVlz9YrAJT8RIAqpkxNtUNLxm 70CRAoIBADx/69FaXuTJG/fdaicOGzWFwTCaetEgt8cSWSwRAs/eKNdGks7Qv/5I
erSNOAC3QkxFo+V9n/ay1moZOLx29Z8Obilp5Vs2wVr04ncac6PYKzZyKfrdKm7u hc31v3GlZivzJQ+uS0b1cDyCl6ivwkk3/vgxBjuYrcNo2IXPYDNBn44km660WfyN
7IBH37vYZpPuHWTyidADG6mhgA4I7s+nTwygt3+ZboHskBYYQ292ysIHFKTr7Fw9 nJolKJfPVQNuyJ5fQVtrknw4Ba2N/Z3KmQse9XeXpCtu0eLqeZqFAITOiVWyCizQ
NBegW4A2DmpRXLLYjwVBsfA+LA5Ed584KSVS0iR/masBR8R9nYfiqk8xnT2qw7Xz O8TG/1b5R6Il9CQNhK9+jH8VaQb3KJWA2cqzqORu5CWrqyusjUrT6xeuQE50NDqC
Zxlf5/b/S+rIUqP0DK5k2jhXi9S50S/0axNocTj7xe+3BFtHLSMykU4GFnp+crpD fkevACUsluNvHw4Y8C6YzlSaMypxKbKM4ZS/SNEHgRa0L9+GxsZ7H4GJtgpandsf
VziKWEu8DJGCG/LDFtQYHZazH1s7D2wBAoIBAAlsypm5cF+QLP3N+pbvrz209C4S yNcjx2Idw34hlOBTuDW3Vbp+RN2DqTECggEAYKowYENmxNCiIyVTT8dhunMOoT1h
214MMdKjGKYvAhh7DkHS2nGITqelh123zQeLom8KI3qX1zXhetnOM3JSYjP5RzRW v9Qn5Rh9QlvcTN+ncnkc41VqO4yV/FbPM+q1cpUiBV4UZL4rQMTOOaqqL2B2p5Li
x5hRqNGMnHftI1uUhse+GfKakeQFgfw0GiyIQkUbDmyel6/7cF5+MiUwyHNG/DG0 urWNxTNq/eB7ZfODLqXVfMvRwPKdKxyIjmUZE3bI60imHEDOZ2qWQTYSdE+2zfHJ
Hnsd3RXEeh/FoXwmPDIvBR72ikbD8uvwnMaEE3op83AtPj7tztKtVjRvLvmBzTFV IGLuhvU6Exf9rWCIfijaARBgR3ySG7446mZdn9oOUFyqH14GduYwLmecS4EHdwkZ
sYbInI2RVJSaOFt0e6yrXlGZbrl5/Tp/A9V75EDPIekRgChNoZ0G9keJ2NwwZjKt urb+eIB04u6a48F9wg2Jgz/3BV/S3/8UA3pG1sjFdRHlIIozK4hM7mOe65zO3Tp3
8Nh6G8uNd2glRj1x/FRuD3hIcSMMlgwqDsT9Y0Ng/0DBeeinbOGO/pp7TG4= nEho0UzzTj1VU00v7fWNQJBPWlst0Bk6gKInRQZxAYBmvsyiw4+Jt3516A==
-----END rsa private key----- -----END rsa private key-----

View File

@@ -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-----

View File

@@ -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