Rust 如何获取BTreeMap中的最后一项?
如果您有键/值对(或仅键)的排序映射,其中一个明显的操作是获取第一对或最后一对(或键) 为此,C++有Rust 如何获取BTreeMap中的最后一项?,rust,b-tree,Rust,B Tree,如果您有键/值对(或仅键)的排序映射,其中一个明显的操作是获取第一对或最后一对(或键) 为此,C++有front()和back()。没有,但是*map.begin()和*map.rbegin()(反向迭代器)可以实现这一点(假设知道映射不是空的) 在Rust中,获取映射的第一个元素似乎需要map.iter().next().unwrap()-丑陋,但考虑到需要进行一些错误检查,这可能是合理的 我们怎样才能得到最后一个元素?通过单步遍历所有元素:map.iter().last().unwrap()
front()
和back()
。没有,但是*map.begin()
和*map.rbegin()
(反向迭代器)可以实现这一点(假设知道映射不是空的)
在Rust中,获取映射的第一个元素似乎需要map.iter().next().unwrap()
-丑陋,但考虑到需要进行一些错误检查,这可能是合理的
我们怎样才能得到最后一个元素?通过单步遍历所有元素:map.iter().last().unwrap()
我看到有一个合理的替代方案,BTreeMap::iter()
返回的,它实现了,rev()
的方法可以工作,或者:
该方法要求Self
实现,因此它应该始终是针对您的用例的优化和正确选择
fn版本(自)->
哪里
Self:doubleEndediter,
专用方法可以提高可发现性,但您可以做到:
let map: BTreeMap<K, V> = ...;
let min = map.iter().next();
let max = map.iter().next_back();
and the same for BTreeSet.
let-map:BTreeMap=。。。;
设min=map.iter().next();
让max=map.iter().next_back();
B树也是如此。
为什么要展开?您是否可以对代码进行结构化,以便在有条件的情况下使用返回值的存在(或不存在);我最终使用了.unwrap\u或(0)
来处理这个用例。另一方面,我首先需要知道只有一个元素,因此map.iter().next().unwrap()
——获取唯一元素的方法有点笨拙!
let map: BTreeMap<K, V> = ...;
let min = map.iter().next();
let max = map.iter().next_back();
and the same for BTreeSet.