rust 如何获取BTreeMap中的最后一个项目?

3npbholx  于 2023-04-06  发布在  其他
关注(0)|答案(3)|浏览(125)

如果你有一个键/值对(或者只是键)的排序Map,一个明显的操作就是获取第一个或最后一个对(或者键)。
C++的std::vectorfront()back()用于此目的。std::map没有,但*map.begin()*map.rbegin()(反向迭代器)可以用于此目的(假设人们知道Map不为空)。
在Rust中,获取map的第一个元素似乎需要map.iter().next().unwrap()- ugly,但考虑到需要一些错误检查,这也许是合理的。
如何得到最后一个元素?通过遍历所有元素:一米七三
我看到有Iterator::rev(),那么map.iter().rev().next().unwrap()是一个合理的替代方案吗?

cidc1ykv

cidc1ykv1#

BTreeMap::iter()返回的btree_map::Iter实现了DoubleEndedIterator,所以实际上,要么使用rev()的方法,要么使用you can use the next_back() method directly

let (key, value) = map.iter().next_back().unwrap();
syqv5f0l

syqv5f0l2#

https://github.com/rust-lang/rust/issues/31690#issuecomment-184445033
专用方法将提高可发现性,但您可以:

let map: BTreeMap<K, V> = ...;
let min = map.iter().next();
let max = map.iter().next_back();

对于BTreeSet也是如此。

bmp9r5qi

bmp9r5qi3#

Iterator::rev方法要求Self实现DoubleEndedIterator,因此对于您的用例来说,它应该始终是一个优化和正确的选择。

fn rev(self) -> Rev<Self>
where
    Self: DoubleEndedIterator,

相关问题