将Vec与生锈范围进行比较

Chr*_*son 4 rust

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

vec == &(0..vec.len())
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*odt 7

您可以使用迭代器将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");
}
Run Code Online (Sandbox Code Playgroud)

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

v.iter().cloned().eq(0..v.len())
Run Code Online (Sandbox Code Playgroud)
  • v.iter()通过对vector(Iterator<Item = &{integer}>)中元素的引用创建一个迭代器.
  • .cloned()克隆迭代器中的每个元素,从引用转到拥有值.这是因为我们不能要求比&{integer}{integer}.幸运的是,克隆一个简单的整数基本上是免费的.所以现在我们有了Iterator<Item = {integer}>.
  • .eq是一种Iterator将迭代器与另一个迭代器进行比较的方法.
  • 0..v.len()是0(含)到v.len()(不包括)的范围.这样的范围实现Iterator.