【发布时间】:2020-12-29 14:21:26
【问题描述】:
我想从 VB.NET 中的二维数组中读取第一行的所有元素。有没有一种简单的方法来做到这一点,而不是运行一个循环。我知道在 MATLAB 中有可能说:A(1,:) 并且它完成了。
谢谢。
【问题讨论】:
标签: arrays vb.net multidimensional-array
我想从 VB.NET 中的二维数组中读取第一行的所有元素。有没有一种简单的方法来做到这一点,而不是运行一个循环。我知道在 MATLAB 中有可能说:A(1,:) 并且它完成了。
谢谢。
【问题讨论】:
标签: arrays vb.net multidimensional-array
数组本身没有任何内容可以在没有循环的情况下读取,但您可以使用 LINQ 查询,例如
Dim firstRow = Enumerable.Range(0, myArray.GetUpperBound(1) + 1).
Select(Function(i) myArray(0, i))
请注意,没有为二维数组定义什么是“行”和什么是“列”,因此您是否要使用它或这个完全取决于您:
Dim firstRow = Enumerable.Range(0, myArray.GetUpperBound(0) + 1).
Select(Function(i) myArray(i, 0))
这为您提供了指定元素的可枚举列表,所以问题是,您想用它做什么?你实际上没有指定。事实上,你真正能做的就是枚举它,这意味着在它上面运行一个For Each 循环。这有点违背了首先避免循环的目的。如果您说但实际上没有说您想要一维数组中的这些元素,那么您可以调用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)
【讨论】:
myArray(0, i),第二个索引是列。第二种方法假设第一个索引是列,第二个索引是行:myArray(i, 0)。请注意0 和i 在两个版本中已交换,GetUpperBound() 调用使用1 或0 分别获取列数或行数。
Dim firstRow = myJaggedArray(0) .如果您真正想要的是一个包含每个内部数组的第一个元素的数组,那么您基本上可以使用与第二个 sn-p 相同的代码,将 myArray(i, 0) 替换为 myArray(i)(0)。如果需要,您可以在最后链接ToArray 调用。
myArray.GetUpperBound(0) + 1简化为myArray.Length。
如果您不知道数组的大小,您可以像这样使用嵌套循环 For Each:
For each row in array
For each col in row
''something here like Debug.Write(col.ToString)
Next
Next
如果您知道自己的大小并且想要数组中的特定项目,您只需像在任何其他循环“for”中一样执行此操作,如下所示:
For index As Integer = 5 To 5
For index2 As Integer = 3 To 3
Debug.Write(index2.ToString)
Next
Next
【讨论】: