gpt4 book ai didi

rust - 如何就地删除集合类型的成员?

转载 作者:行者123 更新时间:2023-11-29 08:15:11 24 4
gpt4 key购买 nike

我想遍历结构中的集合类型并删除一些值,但 Rust 阻止我销毁集合:

fn some_method(&mut self) {
self.collection = self
.collection
.into_iter()
.filter(/* ... */
.collect();
}

我可以克隆所有值来构建另一个集合,但效率不高。从 Rust 中的集合中删除值的惯用方法是什么?

最佳答案

一个完整的例子(也有 into_iter):

#[derive(Debug)]
struct Scores {
collection: Vec<i32>,
}

impl Scores {
fn new() -> Scores {
return Scores {
collection: Vec::new(),
};
}

fn filter_in_above_50(&mut self) {
self.collection = self
.collection
.drain(..)
.filter(|score| score > &50)
.collect();
}

fn filter_in_above_50_using_into_iter(&mut self) {
let coll: &mut Vec<i32> = self.collection.as_mut();
let coll: Vec<i32> = coll
.into_iter()
.filter(|score| score > &&mut 50i32)
.map(|&mut x| x)
.collect();
self.collection = coll;
}
}

和测试:

#[test]
fn score_test() {
let mut s = Scores::new();
s.collection.push(199);
s.collection.push(11);
s.filter_in_above_50();
assert_eq!(s.collection, vec![199]);
}

#[test]
fn score_test_using_into_iter() {
let mut s = Scores::new();
s.collection.push(199);
s.collection.push(11);
s.filter_in_above_50_using_into_iter();
assert_eq!(s.collection, vec![199]);
}

关于rust - 如何就地删除集合类型的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58161291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com