go-funk这个辅助函数可以解决常见问题,如删除切片中的所有重复项、获取两个集合之间的差异、用值填充数组的元素、获取两个集合之间的交集等等。
安装软件包:
go get github.com/thoas/go-funk
示例代码1:
package main
import (
"fmt"
"github.com/thoas/go-funk"
)
func main() {
slice1 := []int{1, 3, 5, 7, 9}
slice2 := []int{1, 2, 3, 4, 5, 6}
// 集合1中,不包含在集合2的元素集合subtract := funk.Subtract(slice1, slice2)
fmt.Println(subtract)
// 计算交集intersect := funk.Intersect(slice1, slice2)
fmt.Println(intersect)
// 分别计算其他集合中不存在的元素slice_1_Diff, slice_2_Diff := funk.Difference(slice1, slice2)
fmt.Println(slice_1_Diff)
fmt.Println(slice_2_Diff)
// 按下标打包,类似python的元组zip := funk.Zip(slice1, slice2)
fmt.Println(zip)
// 判断集合1是否为集合2的子集subset := funk.Subset(slice1, slice2)
fmt.Println(subset)
// 判断两个切片元素是否相同Equal := funk.Equal(slice1, slice2)
fmt.Println(Equal)
// 判断slice1是否是slice2中的一个元素convertSlice := funk.Contains(slice2, slice1)
fmt.Println(convertSlice)
}
输出1:
[7 9]
[1 3 5]
[7 9]
[2 4 6]
[{1 1} {3 2} {5 3} {7 4} {9 5}]
false
false
false
示例代码2:
package main
import (
"fmt"
"github.com/thoas/go-funk"
)
func main() {
var map1 = map[string]int{"Mark": 10, "Sandy": 20,
"Rocky": 30, "Rajiv": 40, "Kate": 50}
// 通过自定义函数转换为另一种类型flip := funk.Map(map1, func(k string, v int) (int, string) {
return v, k
})
fmt.Println(flip)
// 返回元素键数组keys := funk.Keys(map1)
fmt.Println(keys)
// 返回元素值数组values := funk.Values(map1)
fmt.Println(values)
}
输出2:
map[10:Mark 20:Sandy 30:Rocky 40:Rajiv 50:Kate]
[Sandy Rocky Rajiv Kate Mark]
[40 50 10 20 30]