gpt4 book ai didi

rust - 如何按向量的键分组?

转载 作者:行者123 更新时间:2023-11-29 08:34:46 33 4
gpt4 key购买 nike

当键是向量时,我想通过键对向量进行分组。

struct Document {
categories: Vec<String>,
body: String
}
let docs = vec![
Document {categories: ["rust".to_string(), body: "doc1".to_string()]},
Document {categories: ["clojure".to_string()], body: "doc2".to_string()},
Document {categories: ["java".to_string()], body: "doc3".to_string()},
Document {categories: ["rust".to_string(), "clojure".to_string], body: "doc4".to_string()}
];

我想返回如下 (category_key, documents)

"rust" => [doc1, doc4]  
"clojure" => [doc2, doc4]
"java" => [doc3]

最佳答案

我是 Rust 的新手,这对我来说是一个挑战

use std::collections::HashMap;

let result = docs.iter().fold(
HashMap::new(),
|mut init: HashMap<String, Vec<String>>, ref item| {
for category in &item.categories {
let item_body = item.body.clone();

let new_vector: Vec<String> = init
.remove(category)
.map(|mut val| {
val.push(item_body.clone());
val
})
.unwrap_or(vec![item_body.clone()])
.to_vec();
init.insert(category.clone(), new_vector);
}

init
},
);

我确信这段代码可以简化。

关于rust - 如何按向量的键分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56510293/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com