我想检查一个Vec
是否等于[0, 1, 2, ...]
。我已经尝试了各种变体:
vec == &(0..vec.len())
但是它们似乎都不起作用。我只需要手写一个循环吗?
我想检查一个Vec
是否等于[0, 1, 2, ...]
。我已经尝试了各种变体:
vec == &(0..vec.len())
但是它们似乎都不起作用。我只需要手写一个循环吗?
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
是Iterator
的方法,它将迭代器与另一个迭代器进行比较。0..v.len()
是从0(包含)到v.len()
(不包含)的范围。这样的范围实现了Iterator
。