我有一个解析输入字符串的函数:
fn parse_input(s: &str) -> ((usize, usize), BTreeMap<(usize, usize), Tile>){
let mut start: (usize, usize) = (0,0);
let grid = s.split("\n").enumerate().flat_map(|(r,l)| {
l.chars().enumerate().map(move |(col, c)| {
let t = classify_tile(c);
match t {
Tile::Start => {
*start = (r, col);
((r,col), t)
},
_ => ((r,col), t)
}
})
}).collect::<BTreeMap<(usize, usize), Tile>>();
(start, grid)
}
我基本上想捕获起始图块的 r 和 col 值(这是唯一的,仅出现一次)。但目前,如果我尝试修改迭代器内的元组,我假设由于借用和范围原因,该值不会在迭代器外部修改。不过,迭代器完成很重要。
另一种解决方案是随后在 btreemap 中搜索起始图块,但我希望有一个更有效的解决方案。
我应该将其作为嵌套 for 循环吗?这里的迭代实际上是否更有效?
编辑:classify_tile 函数返回枚举类型。开始,土壤或管道。*start = (r,col) 部分不起作用。这是我试图解决这个问题的尝试。其他一切都可以。