如何在VB.NET中从较大的数组中获取子数组?
我有: 我想要一个新数组,如何在VB.NET中从较大的数组中获取子数组?,.net,vb.net,arrays,.net,Vb.net,Arrays,我有: 我想要一个新数组,sub,只包含{“一”,“三”}。执行此操作的最佳方法是什么?您可以使用此方法。我不知道你是如何从数组中选取元素的。你是随机挑选还是其他方式?但是我认为您需要创建第二个数组并使用Copy方法 您可以通过多种方式使用复制方法。我上面给出的链接是从第一个数组的指定索引中选取一个元素,并复制到第二个数组的指定索引中 下面是C#中的一个示例: 下面是一个VB.NET示例: 在您的情况下,您可以将Array.Copy放在一个循环中,并不断更改源和目标索引。对于这种特殊情况,最简
sub
,只包含{“一”,“三”}。执行此操作的最佳方法是什么?您可以使用此方法。我不知道你是如何从数组中选取元素的。你是随机挑选还是其他方式?但是我认为您需要创建第二个数组并使用Copy方法
您可以通过多种方式使用复制方法。我上面给出的链接是从第一个数组的指定索引中选取一个元素,并复制到第二个数组的指定索引中
下面是C#中的一个示例:
下面是一个VB.NET示例:
在您的情况下,您可以将Array.Copy放在一个循环中,并不断更改源和目标索引。对于这种特殊情况,最简单的选择就是列出要复制的两项:
string[] firstArray = {"dog","cat","fish","monkey"};
string[] secondArray = firstArray;
Array.Copy(firstArray,3,secondArray,0,1);
Console.WriteLine(secondArray[0].ToString());
在一般情况下,如果要获取第一项,请跳过一项,然后获取所有剩余项,一个简单的选项是使用LINQ扩展方法:
Dim sub = {arr(0), arr(2)}
它产生
({“一”}
)arr.Take(1)
- 连接到(
)Concat
({“三”}
)arr.Skip(2)
- 放入新数组(
)ToArray()
- 要准确地了解您想要的东西有点困难,但类似的方法可以奏效
Dim sub = arr.Take(1).Concat(arr.Skip(2)).ToArray()
就我个人而言,如果您想经常进行这样的更改,我会使用List
而不是String()
编辑:考虑RPK的以下评论:
Dim arr() As String = {"one","two","three"}
Dim templist As New List(Of String)(arr)
templist.RemoveAt(1)
Dim sub() As String = templist.ToArray()
您可以为单个元素调用它:
Function RemoveElements(ByVal arr() As String, ByVal ParamArray skip() As Integer) As String()
Dim templist As New List(Of String)(arr.Length - skip.Length)
For i As Integer = 0 to templist.Length - 1
if Array.IndexOf(skip, i) = -1 Then templist.Add(arr(i))
Next i
Return templist.ToArray()
End Function
或者使用任意数量的元素:
' Skips the second element.
Dim sub() As String = RemoveElements(arr, 1)
或使用数组:
' Skips the second, fourth, seventh and eleventh elements.
Dim sub() As String = RemoveElements(arr, 1, 3, 6, 10)
注意,这是一个缓慢的代码,但它可以使您的代码更易于阅读和维护
' Skips the second, fourth, seventh and eleventh elements.
Dim sub() As String = RemoveElements(arr, 1, 3, 6, 10)
' Skips the second, fourth, seventh and eleventh elements.
Dim skip() As Integer = {1, 3, 6, 10}
Dim sub() As String = RemoveElements(arr, skip)