Проверьте, одинакова ли длина всех векторов в Rust - PullRequest
0 голосов
/ 20 февраля 2019

Дан вектор векторов некоторого значения T, т.е.Vec<Vec<T>>.

Какой идиоматический способ проверить, имеют ли внутренние векторы одинаковую длину?(без внешних зависимостей)

То есть true, если все внутренние векторы имеют одинаковую длину, и false в противном случае.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Другое решение, более общее и идиоматическое, на мой взгляд:

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()
0 голосов
/ 20 февраля 2019

Вы можете использовать метод 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");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...