英文:
Do Sets exist in Go? (like in Python)
问题
有没有类似于Python中的'Set'的Go集合?
替代方案:
- 在Go中有没有实现集合的简单方法?
- 有没有办法在切片中消除重复项?
英文:
Is there any Go collection similar to 'Set's in python?
alternatives:
- Is there an easy way of implementing Sets in Go?
- Is there any method to eliminate duplicates in a slice?
答案1
得分: 15
你可以使用map[任意类型]bool
,并将值设置为true
。你可以将切片中的每个元素作为map的键,然后使用range
来获取唯一的元素。
package main
import "fmt"
func main() {
m := make(map[string]bool)
s := make([]string, 0)
s = append(s, "foo")
s = append(s, "foo")
s = append(s, "foo")
s = append(s, "bar")
s = append(s, "bar")
for _, r := range s {
m[r] = true
}
s = make([]string, 0)
for k, _ := range m {
s = append(s, k)
}
fmt.Printf("%v\n", s)
}
英文:
You could just have a map[whatevertype]bool
and set the value to true
. You could add every element in a slice as a map key, then use a range
to get only the unique ones back out.
package main
import "fmt"
func main() {
m := make(map[string]bool)
s := make([]string, 0)
s = append(s, "foo")
s = append(s, "foo")
s = append(s, "foo")
s = append(s, "bar")
s = append(s, "bar")
for _, r := range s {
m[r] = true
}
s = make([]string, 0)
for k, _ := range m {
s = append(s, k)
}
fmt.Printf("%v\n", s)
}
答案2
得分: 2
我认为map[T]bool
是最好的选择,但另一个选项是map[T]struct{}
:
package main
func main() {
{ // 示例 1
s := make(map[string]struct{})
s["north"] = struct{}{}
s["south"] = struct{}{}
_, ok := s["north"]
println(ok)
}
{ // 示例 2
s := map[string]struct{}{
"north": {}, "south": {},
}
_, ok := s["north"]
println(ok)
}
}
虽然它不太容易使用,但如果内存是一个因素,它占用的内存较少。
英文:
I think the map[T]bool
is the best option, but another option is
map[T]struct{}
:
package main
func main() {
{ // example 1
s := make(map[string]struct{})
s["north"] = struct{}{}
s["south"] = struct{}{}
_, ok := s["north"]
println(ok)
}
{ // example 2
s := map[string]struct{}{
"north": {}, "south": {},
}
_, ok := s["north"]
println(ok)
}
}
it's not as easy to work with, but it takes up less memory if that is a factor for you.
答案3
得分: 1
目前在golang中没有集合的实现。你需要自己实现或者使用第三方库。这里还有一篇不错的博客文章:https://www.openmymind.net/2011/7/15/Learning-Go-By-Benchmarking-Set-Implementation/
英文:
There is no set implementation in golang at this point. You'll need to do it yourself or get a third party lib. Also here is a nice blog post:
https://www.openmymind.net/2011/7/15/Learning-Go-By-Benchmarking-Set-Implementation/
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论