仅打印数组的不同或重复元素并忽略其余元素 - vb

print only distinct or duplicate elements of array and ignore the rest of elements - vb

vb 上是否有函数只打印数组的不同元素,而不打印 List 或 ArrayList?我的代码是这样
Dim TestVal(4) as String
TestVal(0) = "a"
TestVal(1) = "a"
TestVal(2) = "b"
TestVal(3) = "c"
TestVal(4) = "c"
Label7.Text = String.Join(",", TestVal.Distinct())
我想要的输出是 a,c 并且 只是忽略其他元素 。有没有像Distinct()或者Where子句这样的函数?

要仅查找重复项,您可以使用 LINQ 分组,如下所示:

Dim q = From p In TestVal
        Group By p Into Group, Count()
        Where Count > 1
        Select p
        Order By p

Console.WriteLine(String.Join(",", q)) ' will print "a,c"

请注意,Where Count > 1 是 select 的唯一值(重复)。

另一方面,如果您只想查找唯一值,请将 Where Count > 1 更改为 Where Count = 1,如下所示:

Dim q = From p In TestVal
        Group By p Into Group, Count()
        Where Count = 1
        Select p
        Order By p

Console.WriteLine(String.Join(",", q)) ' will print "b"

无论哪种方式,Order By p 都是可选的。如果您不需要对结果字符串连接进行排序,则可以将其省略。

好的,试试这个代码:

Private Function GetDuplicatitions(array As String()) As String
    Dim result = ""
    For Each item In array
        If IsInList(result, item) Then Continue For
        If HasDuplications(array, item) Then result &= item & ","
    Next
    Return result
End Function

Private Function HasDuplications(array As String(), text As String) As Boolean
    Dim count = 0
    For Each item In array
        If item = text Then count = count + 1
        If count > 1 Then Return True
    Next
    Return False
End Function

Private Function IsInList(list As String, item As String) As Boolean
    For Each duplicated In list.Split(",")
        If item = duplicated Then Return True
    Next
    Return False
End Function

也许你想把它放在一个助手中 class。要使用它,您只需这样称呼它:

Dim list = {"a", "a", "b", "c", "c"}
Label7.Text = GetDuplicatitions(list)