我有一个DataTable dt
,需要将某个列的第一个n
项存储在整数数组中。我知道用这样的循环很容易做到这一点:
Dim array(n-1) As Integer
For i As Integer = 0 To n-1
array(i) = dt.Rows(i).Item("columName")
Next
尽管如此,是否有更方便的方法将这些项目存储在数组中?
答案 0 :(得分:3)
“不使用循环”是不可能的,因为没有神奇的方法来从集合中检索项目而不循环它。但是,也许您认为LINQ不使用循环:
Dim columNameValues = From row In dt
Select row.Field(Of Int32)("columName")
Dim array As Int32() = columNameValues.ToArray()
获取所有行的所有值,如果您希望n
值使用Enumerable.Take
:
Dim array As Int32() = columNameValues.Take(n).ToArray()
在VB.NET中,您甚至可以在LINQ查询中使用Take
:
Dim first10Values = From row In dt
Select row.Field(Of Int32)("columName")
Take 10
正如Barry所提到的那样, 技术上可以在不使用循环的情况下从集合中获取n
项,但请看看自己:
Dim value1 As Int32 = dt.Rows(0).Field(Of Int32)("columName")
Dim value2 As Int32 = dt.Rows(1).Field(Of Int32)("columName")
Dim value3 As Int32 = dt.Rows(2).Field(Of Int32)("columName")
' ..... '
Dim value10 As Int32 = dt.Rows(9).Field(Of Int32)("columName")
您可以将它们添加到List(Of Int32)
,但这只是为了演示目的。