- 主题:Go这么简洁、程序员友好的语言
currenthashmap这种Java做的很好的,其他很多需要都没有。c++都没标准实现
--
FROM 120.244.162.*
具体蛋疼在哪,都是一行代码啊
【 在 ensonmj 的大作中提到: 】
: 每次用map模拟set,非常蛋疼
--
FROM 221.218.139.*
queue是指啥,channel足够满足message queue了吧
【 在 GoGoRoger 的大作中提到: 】
: 没有内置queue、stack、set?
--
FROM 221.218.139.*
正常set只需要一个key啊,map来模拟还需要来个假value,我一般用struct{}{},不觉得有点丑吗
【 在 Chear (企鹅メ祝福メ预言) 的大作中提到: 】
: 具体蛋疼在哪,都是一行代码啊
: 【 在 ensonmj 的大作中提到: 】
: : 每次用map模拟set,非常蛋疼
: --
--
FROM 183.213.129.*
假value可以用{},可以区分和正常map的不同也算方便
【 在 ensonmj 的大作中提到: 】
: 正常set只需要一个key啊,map来模拟还需要来个假value,我一般用struct{}{},不觉得有点丑吗
--
FROM 124.64.17.*
丑是丑了点,又不是不能用
【 在 ensonmj (mj) 的大作中提到: 】
: 正常set只需要一个key啊,map来模拟还需要来个假value,我一般用struct{}{},不觉得有点丑吗
:
: 【 在 Chear (企鹅メ祝福メ预言) 的大作中提到: 】
: : 具体蛋疼在哪,都是一行代码啊
--
FROM 61.148.244.*
汗,发现不管什么语言我从来没用过Set,都是用Map模拟,因为总觉得后面假Value会变成真Value。
【 在 ensonmj 的大作中提到: 】
: 每次用map模拟set,非常蛋疼
--
修改:cn62 FROM 175.42.43.*
FROM 175.42.43.*
Many people have asked for Go's builtin map type to be extended, or rather reduced, to support a set type. Here is a type-safe implementation of a set type, albeit one that uses methods rather than operators like [].
// Package sets implements sets of any comparable type.
package sets
// Set is a set of values.
type Set[T comparable] map[T]struct{}
// Make returns a set of some element type.
func Make[T comparable]() Set[T] {
return make(Set[T])
}
// Add adds v to the set s.
// If v is already in s this has no effect.
func (s Set[T]) Add(v T) {
s[v] = struct{}{}
}
// Delete removes v from the set s.
// If v is not in s this has no effect.
func (s Set[T]) Delete(v T) {
delete(s, v)
}
// Contains reports whether v is in s.
func (s Set[T]) Contains(v T) bool {
_, ok := s[v]
return ok
}
// Len reports the number of elements in s.
func (s Set[T]) Len() int {
return len(s)
}
// Iterate invokes f on each element of s.
// It's OK for f to call the Delete method.
func (s Set[T]) Iterate(f func(T)) {
for v := range s {
f(v)
}
}
Example use:
// Create a set of ints.
// We pass int as a type argument.
// Then we write () because Make does not take any non-type arguments.
// We have to pass an explicit type argument to Make.
// Function argument type inference doesn't work because the
// type argument to Make is only used for a result parameter type.
s := sets.Make[int]()
// Add the value 1 to the set s.
s.Add(1)
// Check that s does not contain the value 2.
if s.Contains(2) { panic("unexpected 2") }
This example shows how to use this design to provide a compile-time type-safe wrapper around an existing API.
https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md
之前没有泛型,所以无法实现编译期类型安全的实现。
所以干脆不实现了
【 在 GoGoRoger 的大作中提到: 】
: 没有内置queue、stack、set?
--
修改:littleSram FROM 61.148.244.*
FROM 61.148.244.*