相关疑难解决方法(0)

iter和into_iter有什么区别?

我正在做Rust示例教程,其中包含以下代码片段:

// Vec example
let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];

// `iter()` for vecs yields `&i32`. Destructure to `i32`.
println!("2 in vec1: {}", vec1.iter()     .any(|&x| x == 2));
// `into_iter()` for vecs yields `i32`. No destructuring required.
println!("2 in vec2: {}", vec2.into_iter().any(| x| x == 2));

// Array example
let array1 = [1, 2, 3];
let array2 = [4, 5, 6];

// `iter()` for arrays yields `&i32`.
println!("2 in array1: {}", array1.iter() …
Run Code Online (Sandbox Code Playgroud)

rust

117
推荐指数
4
解决办法
2万
查看次数

我什么时候应该使用`drain` vs`into_iter`?

从表面上看,它看起来像两者draininto_iter提供类似的迭代器,即集合的值.但是,他们是不同的:

fn main() {
    let mut items1 = vec![0u8, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    let items2 = items1.clone();

    println!("{:?}", items1.drain().count());
    println!("{:?}", items2.into_iter().count());

    println!("{:?}", items1);
    // println!("{:?}", items2); Moved
}
Run Code Online (Sandbox Code Playgroud)

drain需要&mut收集和收集可用之后.into_iter消耗该集合.每个迭代器的适当用途是什么?

iterator rust

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

如何从 Vec 过滤值并仍然返回 Vec?

我有一个函数,它采用 a &Vec<Word>(其中Word是本地定义的类型)并且应该返回 a Vec<Word>(或 a &Vec<Word>)。该函数的定义包括从参数中过滤值:

fn possibleWords(w1: &Word, words: &Vec<Word>) -> Vec<Word> {
    words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>()
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误消息:

fn possibleWords(w1: &Word, words: &Vec<Word>) -> Vec<Word> {
    words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>()
}
Run Code Online (Sandbox Code Playgroud)

我不想返回切片,我真的想要一个Vec. 有没有办法在不Vec从切片中手动构建 a 的情况下做到这一点?

这是一个 MCVE:

type Word = [char; 10];

fn matches(w1: &Word, w2: &Word) -> bool {
    true
}

fn possibleWords(w1: &Word, words: &Vec<Word>) -> Vec<Word> {
    words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>()
}


fn main() {
    let w1 = …
Run Code Online (Sandbox Code Playgroud)

filter rust

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

Rust 和 vec 迭代器 - 如何过滤

我有一个向量并尝试通过过滤创建一个新向量。它不起作用,我不知道为什么:

fn example(data: Vec<f64>, missing_value: f64) {
    let dude = data
        .iter()
        .filter(|&x| *x != missing_value)
        .collect::<Vec<f64>>();
}
Run Code Online (Sandbox Code Playgroud)
fn example(data: Vec<f64>, missing_value: f64) {
    let dude = data
        .iter()
        .filter(|&x| *x != missing_value)
        .collect::<Vec<f64>>();
}
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

rust ×4

filter ×1

iterator ×1