Functional programming 如何在没有循环的情况下搜索二维数组?

Functional programming 如何在没有循环的情况下搜索二维数组?,functional-programming,rust,Functional Programming,Rust,我有一个Vec,我想找到一个特定字符的所有x,y位置,比如说“x”。我可以在枚举中使用双for循环并手动构建解决方案(我想这是明智的做法),但是除了迭代器之外,还有什么好方法可以实现这一点吗 或多或少,我正在寻找清理这些问题的方法: let locs: Vec<(usize, (usize, &char))> = grid.iter() .enumerate() .flat_map(|(ind, row)| iter::repeat(ind

我有一个
Vec
,我想找到一个特定字符的所有x,y位置,比如说“x”。我可以在枚举中使用双for循环并手动构建解决方案(我想这是明智的做法),但是除了迭代器之外,还有什么好方法可以实现这一点吗

或多或少,我正在寻找清理这些问题的方法:

let locs: Vec<(usize, (usize, &char))> = grid.iter()
    .enumerate()
    .flat_map(|(ind, row)|
          iter::repeat(ind)
            .zip(row.iter()
               .enumerate()))
    .filter(|&(x, (y, ch))| ch == 'x')
    .collect();
let locs:Vec=grid.iter()
.enumerate()
.平面图(|)(工业区,世界其他地区)|
国际热核实验堆:重复(ind)
.zip(row.iter()
.enumerate())
.filter(|&(x,(y,ch))| ch=='x')
.收集();

首先,有没有一种方法可以展平元组?

以下是我的尝试,它确实可以展平元组:

let locs: Vec<(usize, usize, char)> = grid.iter()
    .enumerate()
    .flat_map(|(y, row)| {
        row.iter()
           .enumerate()
           .map(move |(x, &c)| (x,y,c))
    })
    .filter(|&(_,_,c)| c == 'x')
    .collect();
println!("{:?}", locs)

实现留给读者作为练习。:-)

我试过了,但我做得越多,它看起来就越不理智。OP写了一个元组,里面有一个元组
(usize,(usize,&char))
。你有工作吗?我正在学习rust,所以这是一个新手评论。这个问题还问元组是否可以展平,即移除元组嵌套。
let locs: Vec<(usize, usize, char) =
    iter2d(grid)
    .filter(&|_,_,c| c == 'x')
    .collect();