gpt4 book ai didi

rust - 从使用rust 的stdin中成对读取线

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

我的输入数据的结构如下:

label_1
value_1
label_2
value_2
...

我的最终目标是将这些数据读入 HashMap我目前的工作方法是将偶数行和奇数行放在两个单独的向量中,然后从这两个向量中读取并添加到Hashmap中。
use std::io;
use std::io::prelude::*;
use std::collections::HashMap;

fn main() {

let mut labels: Vec<String> = Vec::new();
let mut values: Vec<String> = Vec::new();

let stdin = io::stdin();

/* Read lines piped from stdin*/
for (i, line) in stdin.lock().lines().enumerate() {

if i % 2 == 0 {
/* store labels (even lines) in labels vector */
labels.push(line.unwrap());

} else {
/* Store values (odd lines) in values vector */
values.push(line.unwrap());
}
}

println!("number of labels: {}", labels.len());
println!("number of values: {}", values.len());



/* Zip labels and values into one iterator */
let double_iter = labels.iter().zip(values.iter());

/* insert (label: value) pairs into hashmap */
let mut records: HashMap<&String, &String> = HashMap::new();
for (label, value) in double_iter {
records.insert(label, value);
}
}
我想问一下如何在不使用向量的中间步骤的情况下实现此结果?

最佳答案

您可以从.tuples() crate 中使用 itertools :

use itertools::Itertools;
use std::io::{stdin, BufRead};

fn main() {
for (label, value) in stdin().lock().lines().tuples() {
println!("{}: {}", label.unwrap(), value.unwrap());
}
}
也可以看看:
  • This answer上的“迭代器是否有对slice::chunks/windows的等效项来循环对,三元组等?”
  • 关于rust - 从使用rust 的stdin中成对读取线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65282988/

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