新加入的数组缺少一个元素 - vb
newly joined array is missing an element - vb
我正在尝试合并我的 2 个数组,
Dim arr1(3) As String
arr1(0) = "a"
arr1(1) = "b"
arr1(2) = "c"
arr1(3) = "d"
Dim arr2(4) As String
arr2(0) = "a"
arr2(1) = "x"
arr2(2) = "x"
arr2(3) = "b"
arr2(4) = "z"
Dim arr3 As String()
ReDim arr3(UBound(arr1) + UBound(arr2) + 1)
Dim i As Integer
For i = 0 To UBound(arr1)
arr3(i * 2) = arr1(i)
arr3(i * 2 + 1) = arr2(i)
Label8.Text = String.Join(",", arr3)
合并后发生的事情是仅打印它的单个值
Dim r = From s In arr3
Group By s Into Group, Count()
Where Count = 1
Select s
Order By s
Label9.Text = String.Join(",", r)
Next i
购买它只打印 ,c,d
,它应该在合并它们后打印在两个数组中出现一次的所有单个元素,应该是 c,d,z
。我的代码有什么问题?谢谢。
由于两个源数组可以有不同的上限,您将不得不使用两者中的较高者进行迭代,并确保不要访问较短数组范围之外的索引
Dim arr1() As String = {"a", "b", "c", "d"}
Dim arr2() As String = {"a", "x", "x", "b", "z"}
Dim arr3(arr1.Length + arr2.Length - 1) As String
Dim iDestination As Integer = 0
For i As Integer = 0 To Math.Max(UBound(arr1), UBound(arr2))
If i <= UBound(arr1) Then
arr3(iDestination) = arr1(i)
iDestination += 1
End If
If i <= UBound(arr2) Then
arr3(iDestination) = arr2(i)
iDestination += 1
End If
Next
这会像您一样交错结果。
如果不需要交错并且您只是对结果感兴趣(而不是算法),您可以简单地执行:
Dim arr1() As String = {"a", "b", "c", "d"}
Dim arr2() As String = {"a", "x", "x", "b", "z"}
Dim r = From s In arr1.Concat(arr2)
Group By s Into Group, Count()
Where Count = 1 Select s
Order By s
这 returns 元素在 arr1
或 arr2
中恰好出现一次。
另一种方法使用Array.CopyTo
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim arr1(3) As String
arr1(0) = "a"
arr1(1) = "b"
arr1(2) = "c"
arr1(3) = "d"
Dim arr2(4) As String
arr2(0) = "a"
arr2(1) = "x"
arr2(2) = "x"
arr2(3) = "b"
arr2(4) = "z"
Dim arr3 As String()
ReDim arr3(arr1.Length + arr2.Length)
arr1.CopyTo(arr3, 0)
arr2.CopyTo(arr3, arr1.Length)
For Each s As String In arr3
Debug.Print(s)
Next
End Sub
我正在尝试合并我的 2 个数组,
Dim arr1(3) As String
arr1(0) = "a"
arr1(1) = "b"
arr1(2) = "c"
arr1(3) = "d"
Dim arr2(4) As String
arr2(0) = "a"
arr2(1) = "x"
arr2(2) = "x"
arr2(3) = "b"
arr2(4) = "z"
Dim arr3 As String()
ReDim arr3(UBound(arr1) + UBound(arr2) + 1)
Dim i As Integer
For i = 0 To UBound(arr1)
arr3(i * 2) = arr1(i)
arr3(i * 2 + 1) = arr2(i)
Label8.Text = String.Join(",", arr3)
合并后发生的事情是仅打印它的单个值
Dim r = From s In arr3
Group By s Into Group, Count()
Where Count = 1
Select s
Order By s
Label9.Text = String.Join(",", r)
Next i
购买它只打印 ,c,d
,它应该在合并它们后打印在两个数组中出现一次的所有单个元素,应该是 c,d,z
。我的代码有什么问题?谢谢。
由于两个源数组可以有不同的上限,您将不得不使用两者中的较高者进行迭代,并确保不要访问较短数组范围之外的索引
Dim arr1() As String = {"a", "b", "c", "d"}
Dim arr2() As String = {"a", "x", "x", "b", "z"}
Dim arr3(arr1.Length + arr2.Length - 1) As String
Dim iDestination As Integer = 0
For i As Integer = 0 To Math.Max(UBound(arr1), UBound(arr2))
If i <= UBound(arr1) Then
arr3(iDestination) = arr1(i)
iDestination += 1
End If
If i <= UBound(arr2) Then
arr3(iDestination) = arr2(i)
iDestination += 1
End If
Next
这会像您一样交错结果。
如果不需要交错并且您只是对结果感兴趣(而不是算法),您可以简单地执行:
Dim arr1() As String = {"a", "b", "c", "d"}
Dim arr2() As String = {"a", "x", "x", "b", "z"}
Dim r = From s In arr1.Concat(arr2)
Group By s Into Group, Count()
Where Count = 1 Select s
Order By s
这 returns 元素在 arr1
或 arr2
中恰好出现一次。
另一种方法使用Array.CopyTo
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim arr1(3) As String
arr1(0) = "a"
arr1(1) = "b"
arr1(2) = "c"
arr1(3) = "d"
Dim arr2(4) As String
arr2(0) = "a"
arr2(1) = "x"
arr2(2) = "x"
arr2(3) = "b"
arr2(4) = "z"
Dim arr3 As String()
ReDim arr3(arr1.Length + arr2.Length)
arr1.CopyTo(arr3, 0)
arr2.CopyTo(arr3, arr1.Length)
For Each s As String In arr3
Debug.Print(s)
Next
End Sub