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