gpt4 book ai didi

rust - 如何使用迭代器将对象映射反转为元组向量?

转载 作者:行者123 更新时间:2023-11-29 08:03:54 24 4
gpt4 key购买 nike

转换HashMap<String, String> 最简单的方法是什么?至 Vec<(String, Vec<String>)>通过使用迭代器?我想反转 map 。

我试过使用 iter()方法,但不知道如何做正确的 map之后收集值的闭包实现:

fn get_aliases(&self) -> Vec<(String, Vec<String>)> {
let mut aliases: HashMap<String, String> = HashMap::new();
aliases.insert("a".to_owned(), "test".to_owned());
aliases.insert("b".to_owned(), "test".to_owned());
aliases.insert("c".to_owned(), "test2".to_owned());

aliases.iter().map(|(ref a, ref c)| {
// what to do here?
}).collect()

// the expected return value is:
// [("test", ["a", "b"]), ("test2", ["c"])]
}

此函数将返回一个向量,表示 String 的内容键属于某个对象。

我可以用 for 写很多代码和 find s 但在我看来这会降低效率,我认为有一种方法可以通过仅使用迭代器来做到这一点。

最佳答案

I could write a lot of code with for and finds but it seems to me this would be less efficient and I think there is a way to do that by using iterators only.

我不会称它为 很多 代码,并记住 for 循环在迭代器上运行。我没有做过任何基准测试,但这要简单得多,我希望它的性能更高:

use std::collections::HashMap;

fn get_aliases(aliases: HashMap<String, String>) -> Vec<(String, Vec<String>)> {
let mut x = HashMap::new();

for (k, v) in aliases {
x.entry(v).or_insert_with(Vec::new).push(k)
}

x.into_iter().collect()
}

fn main() {
let mut aliases = HashMap::new();
aliases.insert("a".to_owned(), "test".to_owned());
aliases.insert("b".to_owned(), "test".to_owned());
aliases.insert("c".to_owned(), "test2".to_owned());

println!("{:?}", get_aliases(aliases));
}

关于rust - 如何使用迭代器将对象映射反转为元组向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42645273/

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