下面是一段计算句子中单词出现频率的代码。
我想知道HashMap
是否可以设置为不可变后,计数的项目。
let mut map = HashMap::new();
for word in s.split_whitespace() {
*map.entry(word).or_insert(0) += 1;
}
// after the for loop make map immutable
我知道带有collect
API的板条箱Counter
,但我更喜欢在没有板条箱的情况下进行。
我也更喜欢一个不使用函数或闭包的解决方案。
3条答案
按热度按时间bakd9h0s1#
除了Aleksander给出的答案,你还可以使用
Iterator::fold()
来避免一开始就把它变成可变的:vlju58qv2#
如果你想让数据真正的不可改变,例如,确保它在函数调用之间保持有效,你可以将值 Package 在一个实现Deref-Trait. see playground的新类型中。
现在你可以在你的应用程序中传递它,并且依赖于,所有可以改变内部值的代码都必须在
sealed
模块中。如果你觉得这很有趣,你可能想看看我的实验性板条箱sealedstruct,以获得生成样板的灵感。要知道,它既没有发布,也没有很好的文档。g2ieeal73#
如果你有一个可变的变量,并希望以后使它不可变,你可以做简单的 shadowing: