假设我得到了这个向量:let vec = vec![0,2,4,6,8]
和这个范围:let range = 0..10
。我想收集vec中不属于该范围的所有值,所以我的结果向量应该是这样的:[1,3,5,7,9]
我是这样试的:
fn main() {
let range = 0..10;
let vec = vec![0,2,4,6,8];
let x = vec.iter().filter(|&x| !range.contains(x)).collect::<Vec<&i32>>();
println!("{:?}",x);
}
字符串
我试着用!
来反演contains()
的结果,但它对结果没有影响。
另外,我将如何收集到一个vec<i32>
,而不是&i32
。
1条答案
按热度按时间jutyujz01#
除了矛盾的问题(哪些元素应该被包括在内-那些在范围内的,还是那些在范围外的),我假设你想 * 保留 * 在范围内的元素,你有两种解决方案。你可以修改vector in place(1),或者创建一个新的vector,复制range(2)中的值。
在第一种情况下,您可以简单地使用Vec::retain
字符串
在第二种情况下,可以使用Iterator::filter和Iterator::copied
型