我有一个需求, 在一个Vec里面, 我要对立面的元素进行聚合变成一个HashMap, 但是Rust的Iterator没有提供类似Java stream的groupingBy或者collect(toMap)这样的功能.
我的实现是(粗糙): 就是顺序读取Vec里面的元素,然后判断这个元素有没有在HashMap里面(元素是个结构体, 通过里面的某个成员去判断), 没有则insert进去, 如果有, 则从HashMap中get出已经存储的数据, 然后这两者进行计算.然后再次insert进去.
源代码在: https://github.com/ltoddy/cloc-rs/blob/master/src/detail.rs 的最下面的那个函数的if-else里面.
每次cargo check的时候, 都会报warn, 所以想寻找一个更好的写法.
1
共 7 条评论, 1 页
评论区
写评论FromIterator 在 hash map里有实现。
https://doc.rust-lang.org/std/iter/trait.FromIterator.html
https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.collect
大致可以这么做 v.iter().map(T转换为(K,V)).collect()
这里可以改成
我看了一下,你的代码适合用
or_insert_with
对以下内容的回复:
感谢.
对以下内容的回复:
对以下内容的回复:
例如:
这样?