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

在VB.NET中组合数组的各个部分,vb.net,arrays,Vb.net,Arrays,在VB.NET中,有没有一种快速的方法可以获取一个数组中所有的项,这些项甚至都有索引,并将它们放入一个新的数组中?最简单的方法是使用for循环,但可以使用linq执行类似的操作 Dim newArray = Enumerable.Range(0, oldArray.Length) _ .Where(Function(i) i Mod 2 = 0) _ .Select(Function(i) old

在VB.NET中,有没有一种快速的方法可以获取一个数组中所有的项,这些项甚至都有索引,并将它们放入一个新的数组中?

最简单的方法是使用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()

每当我看到这样的问题,以及使用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

我有一个字节数组,它说它们没有相同的签名!我不太明白。不幸的是:重载解析失败,因为无法使用以下参数调用可访问的“Where”:扩展方法“公共函数Where(谓词为System.Func(整型、整型、布尔型))作为System.Collections.Generic.IEnumerable(整型)'在'System.Linq.Enumerable'中定义':嵌套函数与委托'System.Func(整型,整型,布尔型)'的签名不同。此:扩展方法'Public function其中(谓词为System.Func(整型,布尔型))与System.Collections.Generic.IEnumerable(整型)“在”System.Linq.Enumerable“中定义”:Lambda参数“i”隐藏封闭块中的变量、以前定义的范围变量或查询表达式中隐式声明的变量。好的,注意共享错误所在的位置。