如何从给定键开始迭代HashMap ?



给定一个包含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
}

试着谷歌一下,但是没有找到例子。

试着谷歌一下,但没有找到任何例子。

这是因为正如Chayim Friedman指出的那样,它实际上没有意义,hashmap具有本质上随机的内部顺序,这意味着它具有任意的迭代顺序。因此,从键(/项)或在键(/项)之间进行迭代没有多大意义。

这听起来很像一个XY问题,你为什么要尝试从给定的键开始迭代?

虽然如果你真的想要,你可以只使用skip_while适配器,并跳过,而你没有找到你正在寻找的关键。

或者,因为你的帖子是模棱两可的(你谈论键和位置),你可以使用skip适配器跳过固定数量的项目。

从技术上讲,它们都不会从该条目开始迭代,它们都将从0开始迭代,但只产生在指定断点之后的项。标准库的hashmap不支持范围迭代(因为这在hashmap上没有任何意义),它的迭代器也不是随机访问的(出于类似的原因)。

您可能想使用BTreeMap,它具有排序键和一个在键范围上迭代的范围函数。

use std::collections::BTreeMap;
fn main() {
let mut map = BTreeMap::new();
map.insert(1, "one");
map.insert(2, "two");
map.insert(3, "three");
for (&key, &value) in map.range(2..) {
println!("{key}: {value}");
}
}
// 2: two
// 3: three

最新更新