【问题标题】:How to loop through dictionary objects in rust?如何在 rust 中遍历字典对象?
【发布时间】:2021-02-18 13:14:28
【问题描述】:

我有一个字典,我可以在 python 中使用它进行迭代

data = {"one":1,"two":2,"three":3,"four":4,....."two hundred":200}

for i,j in data.items():
    print(i,j)

有什么方法可以使用同一个对象并迭代 rust 中的键和值?

【问题讨论】:

  • for (i, j) in dataij 是拥有值)或 for (r, s) in &datars 是引用)
  • 你问的是同一件事的 Rust 语法吗?或者“相同的对象”是指使用 PyO3 或其他东西从 Rust 访问 Python 对象?

标签: loops dictionary rust hashmap


【解决方案1】:

我假设您正在寻找一种在 Rust 中执行此操作的方法。

Rust 与 Python 字典的类似物是 HashMap

与 Python 的字典不同,HashMaps 是静态类型的 - 要创建一个新的 HashMap,您需要以下内容:

use std::collections::HashMap;
fn main() {
  let mut hashmap: HashMap<String, i32> = HashMap::new();
  hashmap.insert("one".to_string(), 1);
  for (key, value) in hashmap {
      println!("{} {}", key, value);
  }
}

哪些输出:

one 1

Playground link

如果你想将 Python 中的对象加载到 Rust 中,你可以选择!

  • 您可以从 Python 序列化(可能是 JSON?),然后在 Rust 端使用 serde 反序列化它。您可能会使用 shell 将 Python 程序的输出通过管道传输到 Rust 程序。

  • 您可以绑定到 CPython(例如使用 PyO3)。

【讨论】:

    【解决方案2】:

    这对我有用

    use serde_json::json;
    
    fn main() {
              
        let data = json!({"one":1,"two":2,"three":3,"four":4});    
    
        for (key, value) in data.as_object().unwrap(){
            println!("{:?} : {:?}",key,value.as_u64().unwrap());
        }
    }
    

    【讨论】:

    • 请注意,这不会像使用标准库 HashMap 那样快(serde_json 专门用于将 Rust 对象序列化/反序列化到 JSON 或从 JSON 序列化/反序列化)。
    猜你喜欢
    • 2015-09-09
    • 2013-01-21
    • 1970-01-01
    • 2017-05-06
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    相关资源
    最近更新 更多