通过使用迭代器将HashMap<String, String>
转换为Vec<(String, Vec<String>)>
最简单的方法是什么?我想扭转地图。如何使用迭代器将对象映射映射到元组向量?
我试着使用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写很多代码,但在我看来这样效率会降低,我认为有一种方法可以通过仅使用迭代器来实现。
是'Object' hashable or'Ord'?我想我会收集到一个映射('HashMap'或'BTreeMap'),其中键/值先交换以合并这些键,然后将其平化为'Vec'。 –
一个简单的例子显示(1)'别名'的内容和(2)所得到的'Vec'的预期内容将会使这个问题变得更容易理解。 –
@MatthieuM。我已经简化了这个问题,我希望现在更清楚。 –