Я изучаю ржавчину и имею простую программу, показанную ниже. Ссылка на игровую площадку .
#[derive(Debug)]
pub struct Foo {
bar: String,
}
pub fn gather_foos<'a>(data: &'a Vec<Vec<&'a Foo>>) -> Vec<Vec<&'a Foo>> {
let mut ret: Vec<Vec<&Foo>> = Vec::new();
for i in 0..data.len() {
if meets_requirements(&data[i]) {
ret.push(data[i].to_vec());
}
}
return ret
}
fn meets_requirements<'a>(_data: &'a Vec<&'a Foo>) -> bool {
true
}
fn main() {
let foo = Foo{
bar: String::from("bar"),
};
let v1 = vec![&foo, &foo, &foo];
let v2 = vec![&foo, &foo];
let data = vec![v1, v2];
println!("{:?}", gather_foos(&data));
}
Программа просто просматривает массив массивов структуры, проверяет, соответствует ли массив структур некоторому требованию, и возвращает массив массивов, который удовлетворяет этому требованию.
Я уверен, что есть более эффективный способ сделать это без необходимости вызывать to_vec()
, который мне пришлось реализовать, чтобы избежать ошибки cannot move out of borrowed content
, но я не уверен, что это за решение.
Я сейчас узнаю о Box<T>
и думаю, что это может помочь решить мои потребности? Спасибо за любую помощь !!