Czy istnieje funkcja na VB do drukowania tylko odrębnych elementów tablicy, nie listy lub arraylist? Mój kod jest to
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())
To, co chcę być moim wyjściem, byłoby a,c i byłoby po prostu ignoruj inne elementy . Czy istnieje taka funkcja, jak Distinct() lub Where klauzula?

2
Jayson Bulwark 21 luty 2019, 18:31

2 odpowiedzi

Najlepsza odpowiedź

Aby tylko znaleźć Duplikaty, możesz użyć grupowania LINQ w następujący sposób:

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"

Należy pamiętać, że Where Count > 1 ma wybrać tylko wartości więcej niż jednego (duplikaty).

W drugiej ręce, jeśli chcesz znaleźć tylko unikalne wartości, zmień Where Count > 1 do Where Count = 1 w następujący sposób:

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"

Tak czy inaczej, Order By p jest opcjonalny. Możesz go zostawić, jeśli nie potrzebujesz wyników Ciąg dołączenia do sortowania.

2
ajakblackgoat 21 luty 2019, 16:57

OK, spróbuj z tym kodem:

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

Może chcesz umieścić go w klasie pomocnika. Aby go użyć, po prostu nazywa to:

Dim list = {"a", "a", "b", "c", "c"}
Label7.Text = GetDuplicatitions(list)
1
alex 21 luty 2019, 17:24