mirror of
https://github.com/MetaCubeX/Clash.Meta.git
synced 2025-04-19 16:50:56 +00:00
fix: filtering out duplicate domains
This commit is contained in:
parent
4c4f734572
commit
c486d7c67e
1 changed files with 16 additions and 5 deletions
|
@ -27,6 +27,13 @@ type Set struct {
|
|||
func NewDomainTrieSet(keys []string) *Set {
|
||||
filter := make(map[string]struct{}, len(keys))
|
||||
reserveDomains := make([]string, 0, len(keys))
|
||||
filterFunc := func(reserveDomain string) bool {
|
||||
_, ok := filter[reserveDomain]
|
||||
if !ok {
|
||||
filter[reserveDomain] = struct{}{}
|
||||
}
|
||||
return ok
|
||||
}
|
||||
for _, key := range keys {
|
||||
items, ok := ValidAndSplitDomain(key)
|
||||
if !ok {
|
||||
|
@ -35,16 +42,20 @@ func NewDomainTrieSet(keys []string) *Set {
|
|||
if items[0] == complexWildcard {
|
||||
domain := strings.Join(items[1:], domainStep)
|
||||
reserveDomain := utils.Reverse(domain)
|
||||
filter[reserveDomain] = struct{}{}
|
||||
reserveDomains = append(reserveDomains, reserveDomain)
|
||||
if !filterFunc(reserveDomain) {
|
||||
reserveDomains = append(reserveDomains, reserveDomain)
|
||||
}
|
||||
}
|
||||
|
||||
domain := strings.Join(items, domainStep)
|
||||
reserveDomain := utils.Reverse(domain)
|
||||
filter[reserveDomain] = struct{}{}
|
||||
reserveDomains = append(reserveDomains, reserveDomain)
|
||||
if !filterFunc(reserveDomain) {
|
||||
reserveDomains = append(reserveDomains, reserveDomain)
|
||||
}
|
||||
}
|
||||
sort.Strings(reserveDomains)
|
||||
sort.Slice(reserveDomains, func(i, j int) bool {
|
||||
return len(reserveDomains[i]) < len(reserveDomains[j])
|
||||
})
|
||||
keys = reserveDomains
|
||||
ss := &Set{}
|
||||
if len(keys) == 0 {
|
||||
|
|
Loading…
Add table
Reference in a new issue