相关疑难解决方法(0)

为什么Iterator :: take_while取得迭代器的所有权?

我觉得很奇怪,Iterator::take_while它取得了迭代器的所有权.这似乎是一个有用的功能,能够获取满足某些功能但仍保留原始迭代器中其余元素的前x个元素.

我知道这与懒惰的实现不兼容take_while,但仍然感觉很有用.这只是被认为不足以包含在标准库中,还是还有其他一些我没有看到的问题?

rust

13
推荐指数
2
解决办法
1889
查看次数

在Rust中多次使用相同的迭代器

编者注:这个代码示例来自1.0之前的Rust版本,当时实现了许多迭代器Copy.此代码的更新版本会产生不同的错误,但答案仍包含有价值的信息.

我正在尝试编写一个函数来将一个字符串分成几个字母和数字; 例如,"test123test"会变成[ "test", "123", "test" ].这是我到目前为止的尝试:

pub fn split(input: &str) -> Vec<String> {
    let mut bits: Vec<String> = vec![];
    let mut iter = input.chars().peekable();
    loop {
        match iter.peek() {
            None => return bits,
            Some(c) => if c.is_digit() {
                bits.push(iter.take_while(|c| c.is_digit()).collect());
            } else {
                bits.push(iter.take_while(|c| !c.is_digit()).collect());
            }
        }
    }
    return bits;
}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,永远循环.似乎它iter每次调用都使用一个克隆take_while,从同一个位置一遍又一遍地开始.我希望iter每次都使用相同的方法,在所有each_times上推进相同的迭代器.这可能吗?

rust

7
推荐指数
2
解决办法
6191
查看次数

如何使用相同的迭代器两次,一次用于计数,一次用于迭代?

似乎在计数时消耗了迭代器.我如何使用相同的迭代器进行计数然后迭代它?

我正在尝试计算文件中的行,然后打印它们.我能够读取文件内容,我能够计算行数,但是我不再能够遍历这些行,就像内部游标位于迭代器的末尾一样.

use std::fs::File;
use std::io::prelude::*;

fn main() {
    let log_file_name = "/home/myuser/test.log";
    let mut log_file = File::open(log_file_name).unwrap();
    let mut log_content: String = String::from("");
    //Reads the log file.
    log_file.read_to_string(&mut log_content).unwrap();
    //Gets all the lines in a Lines struct.
    let mut lines = log_content.lines();
    //Uses by_ref() in order to not take ownership
    let count = lines.by_ref().count();
    println!("{} lines", count); //Prints the count
                                 //Doesn't enter in the loop
    for value in lines {
        println!("{}", value);
    }
}
Run Code Online (Sandbox Code Playgroud)

Iterator没有reset方法,但似乎内部游标在计数后位于迭代器的末尾.是否必须Lines …

iterator reset rust

3
推荐指数
3
解决办法
1714
查看次数

标签 统计

rust ×3

iterator ×1

reset ×1