【发布时间】:2018-10-08 09:12:16
【问题描述】:
给定一个 float64 数组(或任何其他东西),我想构建一个类似于我们在 python 中找到的集合的set。设计这种数据结构的最佳方法是什么?
到目前为止,我设法使用地图构建了一个集合,但重新利用地图来构建一个集合似乎很尴尬。
package main
import (
"fmt"
"sort"
)
func main() {
var scores = []float64{
12.0, 6.0, 19.0, 20.0, 2.0, 8.0, 20.0,
}
set := make(map[float64]bool)
for _, t := range scores {
set[t] = true
}
unk := make([]float64, 0, len(set))
for t := range set {
unk = append(unk, t)
}
sort.Float64s(unk)
fmt.Println(unk)
}
会产生
[2 6 8 12 19 20]
【问题讨论】:
-
对于“好的”集合,使用具有
bool值类型(具有true值)的映射并利用零值。对于内存占用最小的集合,使用具有struct{}值类型的映射(并使用逗号-ok 习惯用法来判断一个值是否在集合/映射中)。 -
作为替代方案,您可以使用开源库。
github.com/soroushj/menge涵盖所有基本类型,包括浮点数。k8s.io/apimachinery/pkg/util/sets实现整数和字符串的集合,但不是浮点数。
标签: go data-structures set