为什么Go没有内置的集合(Set)数据类型以及如何实现它?
大家好!我是一名初学Go的开发者,从Python转过来,遇到了一个意想不到的问题。
在Python中,我经常使用`set()`来检查元素的唯一性、从列表中删除重复项以及快速检查成员资格。例如:
```python
my_list = [1, 2, 2, 3, 3, 4]
unique = set(my_list) # {1, 2, 3, 4}
if 3 in unique: # O(1)检查
print("找到!")
```
当我开始用Go编写代码时,我期望在标准库中找到类似的东西,但令我惊讶的是,既没有`Set`类型,也没有泛型(直到1.18版本)。我不得不编写一些权宜之计:
```go
// 尝试1:使用map
seen := make(map[int]bool)
items := []int{1, 2, 2, 3, 3, 4}
for _, v := range items {
seen[v] = true
}
// 但这不方便——需要检查ok,代码冗长
```
我明白可以通过`map[T]struct{}`来模拟集合,但这看起来像是一种hack。为什么Go的开发者决定不在标准库中添加单独的`Set`类型?有没有什么...