package  main    import  (   ,“fmt"   )   ,   func  main (), {   ,testStr :=,([]字符串,,0)=,testStr 附加(testStr,“haha",,“hehe",,“hoho",,“hehe"),   ,afterStr :=, removeDuplicate (testStr)   ,fmt.Println (afterStr)   }   ,//,通过地图主键唯一的特性过滤重复元素   func  removeDuplicate (arr []字符串),[]string  {   ,resArr :=,([]字符串,,0)   ,tmpMap :=,使接口(map [string] {})   ,for  _, val :=, range  arr  {//才能判断主键为val的地图是否存在   if 才能,_,ok :=, tmpMap (val);, ok  {!   ,,resArr =,附加(resArr, val)   ,,tmpMap (val),=nil   ,,}   }大敌;   return  resArr   }

3、效率考虑

程序算法有两个指标:运行时间,内存消耗(即:时间复杂度,空间复杂度)。

以上两个方法,当数据量小和数据量大时分别考虑用双重的循环方法和地图主键唯一方法。具体需要数据验证。

<强>补充:Golang中如何删除切片的重复元素

思想如下:利用地图中关键的唯一的特性将切片中的数据保存到映射的键中

但是要注意关键的类型,有些数值不能做为关键

地图是一种无序的键值对的集合. map最重要的一点是通过关键来快速检索数据,关键类似于索引,指向数据的值。

地图是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,地图是无序的,我们无法决定它的返回顺序,这是因为地图是使用哈希表来实现的

Golang中地图中主要的类型

Golang中的地图,其中关键的可以是很多种类型,比如bool,数字,字符串,指针,频道,还有只包含前面几个类型的接口类型、结构体、数组

显然,切片,地图还有函数是不可以了,因为这几个没法用==来判断

<强>原文如下:

如前所述,任何类型的映射键可能是可比的。语言规范定义了这个精确,但简而言之,可比类型是布尔值、数字、字符串指针,频道和接口类型,数组和结构体或包含>//,删除切片中重复的数据   package 主要   import  (   ,“fmt"   ,“reflect"   ,“sort"   )   func  main (), {   ,b :=,[]字符串{“a",,“b",,“c",,“c",,“e",,“f",,“a",,“g",,“b",,“b",,“c"}   ,sort.Strings (b)   ,fmt.Println(复制(b))   ,c :=, int[]{1,, 1,, 2, 4, 6, 7, 8,, 4,, 3,, 2,, 5日,6日,6日,8}   ,sort.Ints (c)   ,fmt.Println (DeleteDuplicateValue (c))   }   func 复制(a 界面{}),(ret []接口{}),{   ,fmt.Printf (“a : % + v \ n",,)   ,va :=, reflect.ValueOf (a)   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null