在 Go 中,一种存储要按没有关联值的键检索的值的内存高效方法是使用与要存储的数据键控的空结构映射。例如,如果你有一个要检查的字符串列表,你的程序以前已经看到过,你可以做这样的事情:
var seen = map[string]struct{}{}
for _, str := range strings {
if _, ok := seen[str]; ok {
// do something
} else {
seen[str] = struct{}{}
}
}
有没有与此相当的 Rust?我知道 Rust 没有像 Go 这样的匿名结构,那么哪种 Rust 类型会在像上面的例子这样的映射中使用最少的内存?还是有另一种更惯用的方法?
HashSet
定义为以单位元组为值的HashMap
:
pub struct HashSet<T, S = RandomState> {
map: HashMap<T, (), S>,
}
BTreeSet
/BTreeMap
也是如此:
pub struct BTreeSet<T> {
map: BTreeMap<T, ()>,
}
什么 Rust 类型将使用最少的内存量
只有一个可能值的任何类型都使用零字节。()
是一个易于键入的。
另请参阅:
在- 泛型类型声明中使用空括号集时是什么意思?