【问题标题】:Rust - How to iterate over HashMap starting from given key?Rust - 如何从给定键开始迭代 HashMap?
【发布时间】:2023-01-23 00:52:03
【问题描述】:

给定 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
}

试图用谷歌搜索它,但到目前为止还没有找到例子。

【问题讨论】:

  • HashMap 是无序的,“从给定键开始”迭代没有意义。它可以从无到有覆盖整个地图。
  • 您要维护插入顺序还是排序顺序?

标签: rust hashmap


【解决方案1】:

试图用谷歌搜索它,但到目前为止还没有找到例子。

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

所以这听起来很像 XY 问题,您尝试“从给定键开始”迭代的原因是什么?

不过,如果你真的想要那样,你可以只使用 skip_while 适配器,并在你没有找到你正在寻找的密钥时跳过。

或者,由于您的帖子含糊不清(您同时谈论键和位置),您可以使用 skip 适配器跳过固定数量的项目。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 2011-03-21
    • 2010-12-02
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多