给出某个值T
的向量的向量,即。 Vec<Vec<T>>
。
检查内部向量长度是否相同的惯用方式是什么? (没有外部依赖性)
也就是说,如果所有内部向量的长度都相同,则为true
,否则为false
。
答案 0 :(得分:4)
您可以使用all
方法来检查迭代器的所有元素是否与谓词匹配。然后,只需与列表中的第一个元素进行比较即可。
fn main() {
let vec_of_vecs = vec![
vec![1, 2, 3],
vec![1, 2, 3],
vec![1, 2, 3],
vec![1, 2, 3],
vec![1, 2, 3],
vec![1, 2, 3, 4], // remove this to prove that it works for both cases
];
let all_same_length = vec_of_vecs
.iter()
.all(|ref v| v.len() == vec_of_vecs[0].len());
if all_same_length {
println!("They're all the same");
} else {
println!("They are not the same");
}
}
答案 1 :(得分:2)
我认为另一种更为通用和惯用的解决方案:
fn all_eq_len<'a, T, E: 'a>(collection: T) -> bool
where
T: IntoIterator<Item = &'a Vec<E>>,
{
let mut iter = collection.into_iter();
if let Some(first) = iter.next() {
let len = first.len();
iter.all(|v| v.len() == len)
} else {
true
}
}
当然要使用itertools:
use itertools::Itertools;
vec_of_vecs.iter().map(|v| v.len()).all_equal()