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

VB.NET中是否支持多维数组的逐元素比较?

.NET中实现二维数组逐元素比较的方法

你可以不用手动写嵌套for循环,用LINQ就能简化实现,当然如果追求性能,手动循环也是直接且高效的选择,以下是两种方案:

1. 使用LINQ简化代码

利用LINQ的Zip和Enumerable.Range,可以将二维数组的行和元素逐一对应比较,生成目标矩阵:

Dim A(4, 4) As Integer = {{1, 2, 3, 4}, {2, 3, 4, 1}, {3, 4, 1, 2}, {4, 1, 2, 3}}
Dim B(4, 4) As Integer = {{1, 2, 3, 4}, {1, 2, 3, 4}, {1, 2, 3, 4}, {1, 2, 3, 4}}

' 把二维数组转换为可枚举的行序列
Dim rowsA = Enumerable.Range(0, A.GetLength(0)).Select(Function(i) 
    Enumerable.Range(0, A.GetLength(1)).Select(Function(j) A(i, j))
End Function)

Dim rowsB = Enumerable.Range(0, B.GetLength(0)).Select(Function(i) 
    Enumerable.Range(0, B.GetLength(1)).Select(Function(j) B(i, j))
End Function)

' 逐行逐元素比较,生成Integer类型的结果矩阵(1/0对应布尔值)
Dim C = rowsA.Zip(rowsB, Function(rowA, rowB) 
    rowA.Zip(rowB, Function(a, b) If(a = b, 1, 0)).ToArray()
End Function).ToArray()

如果需要的是Boolean类型的矩阵,只需把If(a = b, 1, 0)替换为a = b即可。

2. 手动嵌套循环(高性能选项)

如果处理的数组规模较大,手动循环的性能会优于LINQ,逻辑也更直观:

Dim A(4, 4) As Integer = {{1, 2, 3, 4}, {2, 3, 4, 1}, {3, 4, 1, 2}, {4, 1, 2, 3}}
Dim B(4, 4) As Integer = {{1, 2, 3, 4}, {1, 2, 3, 4}, {1, 2, 3, 4}, {1, 2, 3, 4}}

Dim n As Integer = A.GetLength(0)
Dim C(n - 1, n - 1) As Integer

For i As Integer = 0 To n - 1
    For j As Integer = 0 To n - 1
        C(i, j) = If(A(i, j) = B(i, j), 1, 0)
    Next
Next

需要注意的是,.NET没有像NumPy那样原生支持数组的向量化逐元素操作,但通过上述两种方式,都能实现你需要的功能。

内容的提问来源于stack exchange,提问作者mygrandclarity

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:06:07