代码之家  ›  专栏  ›  技术社区  ›  Chris Jefferson

将vec与生锈范围进行比较

  •  4
  • Chris Jefferson  · 技术社区  · 6 年前

    我想检查一下 Vec 等于 [0, 1, 2, ...] . 我尝试过以下各种变体:

    vec == &(0..vec.len())
    

    但它们似乎都不起作用。我需要写一个循环吗?

    1 回复  |  直到 6 年前
        1
  •  7
  •   Lukas Kalbertodt    6 年前

    可以使用迭代器比较 Vec<T> (或者更一般地说,切片 [T] )到一个范围( Playground ):

    let v = vec![0, 1, 2, 3, 4];
    
    if v.iter().cloned().eq(0..v.len()) {
        println!("v contains 0..5");
    } else {
        println!("v doesn't contain 0..5");
    }
    

    我们来剖析一下重要的部分:

    v.iter().cloned().eq(0..v.len())
    
    • v.iter() 在对向量中元素的引用上创建迭代器( Iterator<Item = &{integer}> )。
    • .cloned() 克隆迭代器中的每个元素以从引用转到拥有的值。这是必需的,因为我们无法比较 &{integer} {integer} . 幸运的是,克隆一个简单的整数基本上是免费的。所以现在我们有了 Iterator<Item = {integer}> .
    • .eq is a method of Iterator 它将迭代器与另一个迭代器进行比较。
    • 0..v.len() 是从0(含)到 v.len() (不含)。 Such a range implements Iterator .