我去得一串map如下
[map[userId:1] map[userId:2] map[userId:3] map[userId:3]]
這是我print出來的字串
請問我要怎麼判斷重複的並留下一個
剛接觸不久..還在邊做邊學...
這樣?
package main
import (
"fmt"
"reflect"
)
func unique(arr []map[string]int) []map[string]int {
for index, _:= range arr {
for i := index +1; i < len(arr) ; i++ {
if (reflect.DeepEqual(arr[i], arr[index]) ) {
arr = append(arr[:i], arr[i+1:]...);
i-=1 // 因為刪除資料 arr 長度會縮減, 如果有兩個以上重複會比對不到
}
}
}
return arr;
}
func main() {
var map1, map2, map3 map[string]int;
map1, map2, map3 = make(map[string]int), make(map[string]int), make(map[string]int);
map1["userId"] = 1;
map2["userId"] = 2;
map3["userId"] = 3;
array := []map[string]int{map1, map2, map3, map3};
fmt.Println(unique(array)); //[map[userId:1] map[userId:2] map[userId:3]]
}
是需要對整個內部object做完整資料比較,還是只是想比較userId欄位的值?
這兩個問題的方向性比較不同
func unique(arr []map[string]int) []map[string]int {
for index, _:= range arr {
for i := index +1; i < len(arr) ; i++ {
if reflect.DeepEqual(arr[i], arr[index]) {
arr = append(arr[:i], arr[i+1:]...)
}
}
}
return arr;
}
func main() {
map1, map2, map3,map4 := make(map[string]int), make(map[string]int), make(map[string]int), make(map[string]int)
map1["userId"] = 1
map2["userId"] = 2
map3["userId"] = 3
map4["userId"] = 3
map4["key"] = 3
array := []map[string]int{map1, map2, map3, map4}
fmt.Println(unique(array)) //[map[userId:1] map[userId:2] map[userId:3]]
}
引用樓上的例子做個修改,大概表達下我想說明的
outPut: [map[userId:1] map[userId:2] map[userId:3] map[key:3 userId:3]]