有没有一种快速的方法来获取具有偶数索引的数组的所有项目并将它们放入VB.NET中的新数组中?
答案 0 :(得分:2)
每当我看到这样的问题,以及使用LINQ的答案时,我总是想知道有多大,多久一次。数组有多大以及代码的使用频率。如果这是经常使用的东西LINQ不是答案。
这是一个测试,比较LINQ和替代
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Debug.WriteLine("")
prng.NextBytes(oldArray)
useLinq()
useOther()
End Sub
Dim prng As New Random
Dim oldArray(131072) As Byte
Dim stpw As New Stopwatch
Private Sub useLinq()
stpw.Restart()
Dim newArray() As Byte = Enumerable.Range(0, oldArray.Length).Where(Function(i) i Mod 2 = 0).Select(Function(i) oldArray(i)).ToArray()
stpw.Stop()
Debug.WriteLine("{0} {1:n0} {2:n0} {3} {4} {5}", "L", stpw.ElapsedMilliseconds, newArray.Length, newArray(0), newArray(1), newArray(newArray.Length - 1))
End Sub
Private Sub useOther()
stpw.Restart()
Dim foo As New List(Of Byte)
For x As Integer = 0 To oldArray.Length - 1 Step 2
foo.Add(oldArray(x))
Next
Dim newArray() As Byte = foo.ToArray
stpw.Stop()
Debug.WriteLine("{0} {1:n0} {2:n0} {3} {4} {5}", "O", stpw.ElapsedMilliseconds, newArray.Length, newArray(0), newArray(1), newArray(newArray.Length - 1))
End Sub
答案 1 :(得分:0)
最简单的方法是使用for循环来完成它,但你可以用linq做这样的事情。
Dim newArray = Enumerable.Range(0, oldArray.Length) _
.Where(Function(i) i Mod 2 = 0) _
.Select(Function(i) oldArray(i)) _
.ToArray()
编辑: 这是一个带字节数组的例子
Dim oldArray As Byte() = {1, 2, 3, 4, 5, 6}
Dim newArray As Byte() = Enumerable.Range(0, oldArray.Length).Where(Function(i) i Mod 2 = 0).Select(Function(i) oldArray(i)).ToArray()