从Go的片断中删除重复内容的教程

322 阅读1分钟

如果你想在Go中删除切片中的重复值,你需要创建一个函数:

  • 遍历分片。
  • 检查片断的一个给定值是否在结果值的集合中。如果不是,则将该值添加到结果片中。如果是,则跳过该值(我们在输出片断中已经有了它)。
  • 返回新的输出片断,删除重复的部分。

unique() 函数最重要的部分是创建一个所见值集,它是一个类型为map[string]bool 的映射,所以它可以检查元素是否已经在结果片中。

package main

import "fmt"

func unique(s []string) []string {
    inResult := make(map[string]bool)
    var result []string
    for _, str := range s {
        if _, ok := inResult[str]; !ok {
            inResult[str] = true
            result = append(result, str)
        }
    }
    return result
}

func main() {
    fmt.Println(unique([]string{"abc", "cde", "efg", "efg", "abc", "cde"}))
}

输出

[abc cde efg]

作为输出,你得到一个新的片断,所有的值都是唯一的。这个函数对不同类型的片子的工作方式是一样的。你只需要用另一个选定的类型替换所有出现的类型string