给定n
元素的HashMap,如何从n-x
元素开始迭代?
元素的顺序并不重要,我需要解决的唯一问题是从给定的键开始迭代。
示例:
let mut map: HashMap<&str, i32> = HashMap::new();
map.insert("one", 1);
map.insert("two", 2);
map.insert("three", 3);
map.insert("four", 4);
[...]
for (k, v) in map {
//how to start iteration from third item and not the first one
}
试着谷歌一下,但到目前为止还没有找到例子。
2条答案
按热度按时间lvjbypge1#
试着谷歌一下,但到目前为止还没有找到例子。
这是因为正如Chayim Friedman指出的那样,散列表的内部顺序基本上是随机的,这意味着它的迭代顺序是任意的,因此从键(/条目)开始迭代或在键(/条目)之间迭代没有多大意义。
这听起来很像XY问题,你为什么要“从给定的键开始”迭代呢?
不过如果你真的想这样做,你可以只使用
skip_while
适配器,并跳过,而你还没有找到你正在寻找的关键。或者,由于您的帖子不明确(您同时讨论了键和位置),您可以使用
skip
适配器跳过固定数量的项目。从技术上讲,它们都不会从那个条目开始迭代,它们都从0开始迭代,但只会产生指定断点之后的项。标准库的散列表不支持范围迭代(因为这在散列表上没有任何意义),它的迭代器也不是随机访问的(出于类似的原因)。
dced5bon2#
您可能希望使用BTreeMap,它具有排序键和一个range函数,该函数迭代一系列键。