【发布时间】:2015-05-25 16:33:24
【问题描述】:
我有一个网格:Vec<Vec<Object>> 和一对 x/y 索引。我想找到所有周围被索引的元素。
不幸的是,我不能简单地遍历元素,因为这最终会借用 Vec 两次并且借用检查器对我尖叫:
let mut cells = Vec::with_capacity(8);
for cx in xstart..xend {
for cy in ystart..yend {
if cx != x || cy != y {
cells.push(&mut squares[cy as usize][cx as usize]);
}
}
}
cells.into_iter()
我将其更改为迭代器链的最佳尝试也失败了:
let xstart = if x == 0 { x } else { x - 1 };
let xlen = if x + 2 > squares[0].len() { x + 1 } else { 3 };
let ystart = if y == 0 { y } else { y - 1 };
let ylen = if y + 2 > squares.len() { y + 1 } else { 3 };
let xrel = x - xstart;
let yrel = y - ystart;
squares.iter().enumerate()
.skip(ystart).take(ylen).flat_map(|(i, ref row)|
row.iter().enumerate()
.skip(xstart).take(xlen).filter(|&(j, &c)| i != yrel || j != xrel))
有人知道我该怎么做吗?
【问题讨论】:
-
纯粹出于好奇,您是在制作康威的生命游戏吗?
-
不,扫雷:)
-
您应该将您的示例更新为MCVE。就像现在一样,我们没有许多变量的值或类型。
标签: rust