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);
}
2条答案
按热度按时间rjee0c151#
要获得匹配元素的计数,我可能会使用
filter
和count
。Iterator::zip
接受两个迭代器,并产生每个迭代器值的元组的另一个迭代器。Iterator::filter
引用迭代器的值,并丢弃 predicate 闭包返回false
的任何值。Iterator::count
计算迭代器中的元素数。注意
Iterator::zip
在 * 一个 * 迭代器用完时停止迭代,如果你需要不同的行为,你可能也会对Itertools::zip_longest
或Itertools::zip_eq
感兴趣。zvokhttg2#
如果你想使用@Shepmaster的答案作为单元测试中使用的Assert的基础,试试这个:
当然,在浮点数上使用时要小心!那些讨厌的NaN不会进行比较,你可能想使用一个容差来比较其他值。你可能想通过告诉索引第一个不匹配的值来使它更花哨。