如何在Zig中判断两个同长度数组(如[32]u8)是否相等?
Rust中相同长度数组的比较方法
对于像[32]u8这类固定长度且元素实现了PartialEq trait的数组,有几种常用的比较方式:
直接使用
==/!=运算符
Rust为固定长度数组实现了PartialEqtrait,因此可以直接用相等运算符比较,这是最简洁高效的方式,编译器会针对数组长度做优化(比如用SIMD指令加速)。示例代码:let arr1: [u8; 32] = [0; 32]; let arr2: [u8; 32] = [0; 32]; let arr3: [u8; 32] = [1; 32]; assert!(arr1 == arr2); assert!(arr1 != arr3);逐元素手动比较
如果需要自定义比较逻辑(比如提前终止比较),可以通过遍历数组元素实现:fn arrays_equal(a: &[u8; 32], b: &[u8; 32]) -> bool { // 用迭代器链式调用 a.iter().zip(b.iter()).all(|(x, y)| x == y) } // 或者用普通循环 fn arrays_equal_loop(a: &[u8; 32], b: &[u8; 32]) -> bool { for i in 0..32 { if a[i] != b[i] { return false; } } true }转为切片比较
数组可以自动解引用为切片,也可以通过切片的eq方法或直接比较切片来判断数组是否相等:assert!(arr1.as_slice() == arr2.as_slice()); // 或者直接取整个数组的切片 assert!(&arr1[..] == &arr2[..]);
内容的提问来源于stack exchange,提问作者fiatjaf
相关产品推荐
相关产品推荐

