gpt4 book ai didi

rust - 将长度为 2 的迭代器收集到 HashMap 中

转载 作者:行者123 更新时间:2023-11-29 07:50:32 25 4
gpt4 key购买 nike

我能够有效地将我的输入解析为 Iterator<Iterator<i32>>其中每个内部迭代器的长度为 2。输入如下所示:

0: 3
1: 2
2: 4
4: 8
6: 5
8: 6
...

我可以这样解析:

input.lines()
.map(|line| line.split(": ")
.filter_map(|n| n.parse::<i32>().ok()))

我想到的将其放入 HashMap 中的最佳方法是:

let mut tmp_map: HashMap<i32, i32> = HashMap::new();
for mut pair in input.lines()
.map(|line| line.split(": ")
.filter_map(|n| n.parse::<i32>().ok()))
{
tmp_map.insert(pair.next().unwrap(), pair.next().unwrap());
}

...这看起来很笨重。有没有办法将这个迭代器收集到 HashMap 中? ?

Playground

最佳答案

HashMap工具 FromIterator<(K, V)> .然后只需将文本转换为元组迭代器即可。我喜欢用 Itertools::tuples :

const INPUT: &str = r#"0: 3
1: 2
2: 4
4: 8
6: 5
8: 6"#;

extern crate itertools;

use std::collections::HashMap;
use itertools::Itertools;

fn main() {
let z: HashMap<u8, u8> = INPUT
.lines()
.flat_map(|l| l.split(":"))
.flat_map(|n| n.trim().parse())
.tuples()
.collect();

println!("{:?}", z);
}

另见:

关于rust - 将长度为 2 的迭代器收集到 HashMap 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47802539/

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