以增量方式构建引用相同数据的数据结构



我有一个EntityMap对象,它处理对任何可以具有边界框的东西进行空间索引。我已经以这样一种方式实现它,即它存储对对象的引用而不是拥有的值(这可能不是最好的方法,但我认为将其更改为拥有值只会改变我的问题)。

我目前正在尝试做的是将对象添加到矢量中,使它们不会与以前添加到矢量中的任何内容发生冲突。以下是我刚才描述的伪锈:

let mut final_moves = Vec::new();
let mut move_map = EntityMap::new();
for m in moves.into_iter() {
let close_moves = move_map.find_intersecting(m.bounding_box());
let new_move = m.modify_until_not_intersecting(close_moves);
final_moves.push(new_move);
move_map.insert(final_moves.last().unwrap());
}

final_moves是从函数返回的内容。这里的问题是我正在互借final_moves,但我想在move_map中存储对其对象的引用。我不知道如何解决的冲突是我想同时增量构建final_movesmove_map,但这似乎要求它们都是可变的,然后阻止我从move_map借用数据。

如何重构代码以实现目标?

您可以更改move_mapfinal_moves的类型以包含Rc<Move>而不仅仅是Move

let mut final_moves = Vec::new();
let mut move_map = EntityMap::new();
for m in moves.into_iter() {
let close_moves = move_map.find_intersecting(m.bounding_box());
let new_move = Rc::new(m.modify_until_not_intersecting(close_moves));
final_moves.push(Rc::clone(new_move));
move_map.insert(new_move);
}

最新更新