比较Vec与锈蚀范围

时间:2018-07-17 09:58:14

标签: rust

我想检查<Window.DataContext> <!-- something like this path: --> <!-- AppController.Foo1ViewModel --> </Window.DataContext> 是否等于Vec。我尝试了以下各种变体:

[0, 1, 2, ...]

但是它们似乎都不起作用。我是否需要长时间编写循环?

1 个答案:

答案 0 :(得分: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");
}

我们来剖析重要部分:

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