package app import ( "fmt" "sort" "strings" ) func findProfileDuplicates(profiles []TrafficAppProfile) []string { return collectTargetKeyDuplicates(func(add func(target, key string)) { for _, p := range profiles { add(p.Target, p.AppKey) } }) } func findMarkDuplicates(items []appMarkItem) []string { return collectTargetKeyDuplicates(func(add func(target, key string)) { for _, it := range items { add(it.Target, it.AppKey) } }) } func collectTargetKeyDuplicates(feed func(add func(target, key string))) []string { seen := map[string]int{} feed(func(target, key string) { tgt := strings.ToLower(strings.TrimSpace(target)) k := strings.TrimSpace(key) if tgt == "" || k == "" { return } seen[tgt+"|"+k]++ }) var out []string for k, n := range seen { if n > 1 { out = append(out, fmt.Sprintf("%s x%d", k, n)) } } sort.Strings(out) return out }