在VB.NET中组合数组的各个部分

时间:2011-07-06 02:04:13

标签: vb.net arrays

有没有一种快速的方法来获取具有偶数索引的数组的所有项目并将它们放入VB.NET中的新数组中?

2 个答案:

答案 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()