У меня есть сетка: Vec<Vec<Object>>
и пара индексов x/y. Я хочу найти все элементы вокруг тот, который был проиндексирован.Итератор над элементами вокруг определенного индекса в Vec <Vec<Object>>
К сожалению, я не могу просто перебираем элементы, потому что в конечном итоге заимствования 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))
Кто-нибудь знает, как я могу это сделать?
Из чистого любопытства вы работаете над игрой жизни Конвея? – Shepmaster
Нет, тральщик :) –
Вы должны обновить свой пример, чтобы стать [MCVE] (http://stackoverflow.com/help/mcve). Поскольку это прямо сейчас, у нас нет значений или типов для многих переменных. – Shepmaster