2015-04-08 6 views
3

Каков наилучший способ сравнить 2 вектора или строки по элементам в Rust, в то же время имея возможность обрабатывать каждую пару элементов? Например, если вы хотите сохранить количество разных элементов. Это то, что я использую:Каков наилучший способ сравнить 2 вектора или строки по элементам?

let mut diff_count: i32 = 0i32; 
for (x, y) in a.chars().zip(b.chars()) { 
    if x != y { 
     diff_count += 1i32; 
    } 
} 

Это правильный путь или есть что-то более каноническое?

+0

FYI, нет необходимости указывать тип ('count: i32') ** и ** использовать суффикс типа (' 0i32'). После выбора одного из них вам не нужно указывать тип при добавлении другого литерала ('1i32'). – Shepmaster

ответ

10

Чтобы получить количество подходящих элементов, я бы, вероятно, использовал filter и count.

fn main() { 
    let a = "Hello"; 
    let b = "World"; 

    let matching = a.chars().zip(b.chars()).filter(|&(a, b)| a == b).count(); 
    println!("{}", matching); 

    let a = [1,2,3,4,5]; 
    let b = [1,1,3,3,5]; 

    let matching = a.iter().zip(b.iter()).filter(|&(a, b)| a == b).count(); 
    println!("{}", matching); 
} 
+0

Это именно то, что я придумал, посмотрев на него на минуту. Я просто хотел убедиться, что '' zip'' - это путь. – anderspitman

Смежные вопросы