首页 > 解决方案 > 如何删除接口数组中的重复项

问题描述

假设输入可以包含字符串或整数值

names = ["rahul", "rohit","srujan", "rahul"] --> output = ["rahul", "rohit","srujan"] 
 age=[12,18,12,21] --> output = [12,18,21]

我们可以利用这个功能来过滤重复

package main
  
import (
"fmt"
)
  
func unique(intSlice []int) []int {
    keys := make(map[int]bool)
    list := []int{} 
    for _, entry := range intSlice {
        if _, value := keys[entry]; !value {
            keys[entry] = true
            list = append(list, entry)
        }
    }    
    return list
}
  
func main() {
    intSlice := []int{1,5,3,6,9,9,4,2,3,1,5}
    fmt.Println(intSlice) 
    uniqueSlice := unique(intSlice)
    fmt.Println(uniqueSlice)
}

这仅在输入是字符串或整数而不是两者时才有效 如何确保此函数适用于数组接口

标签: gointerface

解决方案


如何确保此函数适用于(未排序的)空接口切片{}

考虑到空接口{}具有可比性(https://stackoverflow.com/a/54003329/4466350

因此,要回答您的问题,重写原始代码非常简单

package main

import (
    "fmt"
)

func main() {
    intSlice := []interface{}{1, 5, 3, 6, 9, 9, 4, 2, 3, 1, 5}
    fmt.Println(unique(intSlice))
}

func unique(src []interface{}) []interface{} {
    keys := make(map[interface{}]bool)
    list := []interface{}{}
    for _, entry := range src {
        if _, value := keys[entry]; !value {
            keys[entry] = true
            list = append(list, entry)
        }
    }
    return list
}

https://play.golang.org/p/vW7vgwz9yc1

如果您的问题变成,如何删除任何切片类型的重复项,请查看其他答案https://stackoverflow.com/a/65191679/4466350


推荐阅读