2016-05-22 6 views
3

У меня есть массив и вектор, и вектор заполняется в цикле. На каждой итерации цикла я хочу проверить, равно ли четыре последних элемента вектора 4 элементам массива. Размер массива равен 4.Как сравнить массив и часть вектора?

Есть ли лучший способ сделать это, чем сравнивать их элементы по одному? Я бы хотел что-то вроде my_array == my_vector[4, -4]

ответ

9

Есть ли лучший способ сделать это, чем сравнивать их элементы по одному?

Да, вы можете сравнить slice массива с ломтиком вектора:

fn main() { 
    let a = [3, 4, 5, 6]; 
    let v = vec![0, 1, 2, 3, 4, 5, 6]; 
    assert_eq!(&a[..], &v[v.len() - 4..]); 
} 

Срез может быть создан с помощью любого range формы. Вот несколько примеров создания срезов:

fn main() { 
    let v = vec![0, 1, 2, 3, 4, 5, 6]; 

    // indexes 0, 1, 2 (3 not included) 
    assert_eq!(&[0, 1, 2], &v[..3]); 

    // indexes 2, 3 (4 not included) 
    assert_eq!(&[2, 3], &v[2..4]); 

    // indexes 3, 4, ..until the last 
    assert_eq!(&[3, 4, 5, 6], &v[3..]); 

    // all indexes 
    assert_eq!(&[0, 1, 2, 3, 4, 5, 6], &v[..]); 
} 
Смежные вопросы