我想在VB.NET中从二维数组中读取第一行的所有元素。有没有一种简单的方法可以做到这一点,而不是运行循环。我知道在MATLAB中有可能说:A(1,:)
和它完成了。非常感谢。
如果没有循环,数组本身就无法读取任何内容,但您可以使用LINQ查询,例如
Dim firstRow = Enumerable.Range(0, myArray.GetUpperBound(1) + 1).
Select(Function(i) myArray(0, i))
请注意,什么是";行";什么是";列";不是为2D阵列定义的,所以你想使用这个还是这个真的取决于你:
Dim firstRow = Enumerable.Range(0, myArray.GetUpperBound(0) + 1).
Select(Function(i) myArray(i, 0))
这为您提供了一个指定元素的可枚举列表,所以问题是,您想如何处理它?你实际上还没有具体说明。实际上,你所能做的就是枚举它,这意味着在它上面运行一个For Each
循环。这有点违背了最初避免循环的目的。如果你说,而不是实际说,你想要这些元素在1D数组中,那么你可以调用ToArray
:
Dim firstRow = Enumerable.Range(0, myArray.GetUpperBound(1) + 1).
Select(Function(i) myArray(0, i)).
ToArray()
编辑:
这里有一个扩展方法,你可以用来做这项工作:
Imports System.Runtime.CompilerServices
Public Module ArrayExtensions
<Extension>
Public Function GetRow(Of T)(source As T(,), rowIndex As Integer) As T()
Return Enumerable.Range(0, source.GetUpperBound(1) + 1).
Select(Function(i) source(rowIndex, i)).
ToArray()
End Function
End Module
然后,它会使调用代码更加干净,尤其是当您需要多次调用时,例如
Dim firstRow = myArray.GetRow(0)
如果您不知道数组的大小,您可以使用嵌套循环For Each,如下所示:
For each row in array
For each col in row
''something here like Debug.Write(col.ToString)
Next
Next
如果你知道你的大小,并且你想要数组中的特定项目,你只需像在任何其他循环中一样这样做";对于";像这样:
For index As Integer = 5 To 5
For index2 As Integer = 3 To 3
Debug.Write(index2.ToString)
Next
Next