如果你有一个键/值对(或者只是键)的排序Map,一个明显的操作就是获取第一个或最后一个对(或者键)。
C++的std::vector
有front()
和back()
用于此目的。std::map
没有,但*map.begin()
和*map.rbegin()
(反向迭代器)可以用于此目的(假设人们知道Map不为空)。
在Rust中,获取map的第一个元素似乎需要map.iter().next().unwrap()
- ugly,但考虑到需要一些错误检查,这也许是合理的。
如何得到最后一个元素?通过遍历所有元素:一米七三
我看到有Iterator::rev()
,那么map.iter().rev().next().unwrap()
是一个合理的替代方案吗?
3条答案
按热度按时间cidc1ykv1#
BTreeMap::iter()
返回的btree_map::Iter
实现了DoubleEndedIterator
,所以实际上,要么使用rev()
的方法,要么使用you can use thenext_back()
method directly:syqv5f0l2#
https://github.com/rust-lang/rust/issues/31690#issuecomment-184445033
专用方法将提高可发现性,但您可以:
对于BTreeSet也是如此。
bmp9r5qi3#
Iterator::rev
方法要求Self
实现DoubleEndedIterator
,因此对于您的用例来说,它应该始终是一个优化和正确的选择。