我想检查<Window.DataContext>
<!-- something like this path: -->
<!-- AppController.Foo1ViewModel -->
</Window.DataContext>
是否等于Vec
。我尝试了以下各种变体:
[0, 1, 2, ...]
但是它们似乎都不起作用。我是否需要长时间编写循环?
答案 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
。