如何在二维数组中查找指定数值的位置?(附Rust代码示例)
在Rust二维数组中查找指定值的所有位置
要找出给定二维数组中所有值为20的元素位置,我们可以通过遍历数组并记录匹配项的索引来实现,以下是两种实用的实现方式:
首先是原数组定义:
let nested_array = [ [17, 16, 15, 14, 13], [18, 5, 4, 3, 12], [19, 6, 1, 2, 11], [20, 7, 8, 9, 10], [21, 20, 23, 24, 25], ];
方法一:嵌套循环遍历
这种方式逻辑直观,适合快速理解:
let target = 20; let mut positions = Vec::new(); // 遍历每一行,拿到行索引和行内容 for (row_idx, row) in nested_array.iter().enumerate() { // 遍历当前行的每个元素,拿到列索引和元素值 for (col_idx, &value) in row.iter().enumerate() { if value == target { positions.push((row_idx, col_idx)); } } } // 输出结果 println!("值为{}的位置:{:?}", target, positions);
方法二:迭代器链式调用
利用Rust的迭代器特性,写出更简洁的函数式风格代码:
let target = 20; let positions: Vec<(usize, usize)> = nested_array .iter() .enumerate() // 把行索引和该行的匹配元素位置组合起来 .flat_map(|(row_idx, row)| { row.iter() .enumerate() .filter(move |(_, &val)| val == target) .map(move |(col_idx, _)| (row_idx, col_idx)) }) .collect(); println!("值为{}的位置:{:?}", target, positions);
两种方法最终都会输出:值为20的位置:[(3, 0), (4, 1)],对应数组中第4行第1个元素和第5行第2个元素(Rust数组索引从0开始)。
内容的提问来源于stack exchange,提问作者Winston
相关产品推荐
相关产品推荐

