Rust 什么';什么是逐元素比较两个向量或字符串的最佳方法?

Rust 什么';什么是逐元素比较两个向量或字符串的最佳方法?,rust,Rust,在Rust中,在能够对每对元素进行处理的同时,对2个向量或字符串逐元素进行比较的最佳方法是什么?例如,如果您想记录不同元素的数量。这就是我正在使用的: let mut diff_count: i32 = 0i32; for (x, y) in a.chars().zip(b.chars()) { if x != y { diff_count += 1i32; } } 这是正确的方法还是有更规范的方法?要获得匹配元素的计数,我可能会使用filter和count f

在Rust中,在能够对每对元素进行处理的同时,对2个向量或字符串逐元素进行比较的最佳方法是什么?例如,如果您想记录不同元素的数量。这就是我正在使用的:

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

这是正确的方法还是有更规范的方法?

要获得匹配元素的计数,我可能会使用
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).filter(|&(a, b)| a == b).count();
    println!("{}", matching);
}
如果您想用作单元测试中使用的断言的基础,请尝试以下操作:

fn do_vecs_match<T: PartialEq>(a: &Vec<T>, b: &Vec<T>) -> bool {
    let matching = a.iter().zip(b.iter()).filter(|&(a, b)| a == b).count();
    matching == a.len() && matching == b.len()
}
fn do_vecs_匹配(a:&Vec,b:&Vec)->bool{
让matching=a.iter().zip(b.iter()).filter(|&(a,b)| a==b.count();
匹配==a.len()&&matching==b.len()
}

当然,在浮子上使用时要小心!这些讨厌的NaN不会进行比较,您可能希望使用容差来比较其他值。您可能想通过告诉第一个非匹配值的索引来让它更有趣。

这正是我在看了一分钟后得出的结论。我只是想确保
zip
是正确的选择。仅供参考,不需要指定类型(
count:i32
)和使用类型后缀(
0i32
)。选择其中一个后,在添加另一个文本(
1i32
)时无需指定类型
zip
转换为迭代器
,因此您只需执行
.zip(b)
。在进行任何迭代之前,您可以通过检查两个切片的长度是否相同来进行微观优化。