You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更简便地检查Rust二维数组中是否存在相等元素?

如何更简便地检查Rust二维数组中是否存在相等元素?

嘿,这个问题我来帮你搞定!你现在是要检查Zobrist哈希表的随机值数组里有没有重复元素对吧?虽然u64随机值重复的概率极低,但初始化时做个校验确实很稳妥。

这里给你一个简洁高效的实现思路:把二维数组摊平成一维迭代器,用HashSet来跟踪已经出现过的值,一旦发现重复就立刻返回结果,不用遍历完所有元素。

具体代码如下:

use std::collections::HashSet;

// 检查二维数组中是否存在重复元素
fn has_duplicates(arr: &[[u64; 64]; 12]) -> bool {
    let mut seen = HashSet::new();
    // 把二维数组摊平成一维迭代器,逐个检查元素
    arr.iter()
        .flat_map(|row| row.iter())
        .any(|&val| !seen.insert(val))
}

// 调用示例
// fn main() {
//     let mut zobrist_pieces = [[0u64; 64]; 12];
//     // 假设这里已经用rng填充了随机值
//     if has_duplicates(&zobrist_pieces) {
//         println!("数组里有重复元素!");
//     } else {
//         println!("所有元素都是唯一的!");
//     }
// }

简单解释下这个逻辑:

  • flat_map(|row| row.iter()) 把二维数组的每一行都拆成单个元素的迭代器,相当于把整个二维数组“拍扁”成一维序列。
  • any 方法会遍历每个元素,调用seen.insert(val):HashSet的insert方法如果返回false,说明这个值已经在集合里存在过——也就是找到了重复元素,此时any会立刻停止遍历并返回true,非常高效。
  • 如果遍历完所有元素都没有重复,any就会返回false。

要是你还想收集所有重复的元素,可以改用HashMap来统计每个值出现的次数,但如果只是需要判断“有没有重复”,上面的方法已经足够简洁高效啦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 13:08:08