如何只提取重复值?

时间:2013-10-03 17:27:23

标签: .net vb.net

我有以下代码,效果很好。在代码的最后部分,对于I = 0,我试图添加仅显示重复值的代码。我有几个做不同事情的列表框。我甚至有一个列出唯一值但我不知道如何让listbox8只显示重复值。

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

    If GoLstBox.Items.Count <> 20 Then
        MessageBox.Show("Exactly Twenty Numbers Must Be Entered")
    Else
        Dim goArray(GoLstBox.Items.Count - 1) As Object
        GoLstBox.Items.CopyTo(goArray, 0)

        Array.Sort(goArray)
        ListBox6.Items.AddRange(goArray)

        Array.Reverse(goArray)
        ListBox5.Items.AddRange(goArray)

        Dim distinctNums = goArray.Distinct()
        Array.Sort(goArray)
        For Each num In distinctNums
            ListBox7.Items.Add(num.ToString())

            'For i = 0 To goArray.Count - 2
            'If goArray(i) = goArray(i + 1) Then
            ' ListBox8.Items(i + 1) = DirectCast(ListBox4.Items(i + 1), String))
        Next
    End If
End Sub

1 个答案:

答案 0 :(得分:1)

这是你在C#中想要的算法(据我所知,无论如何;你的代码/解释并不完全清楚):

var groupedNumbers = goArray.GroupBy( n => n );

foreach( var numGroup in groupedNumbers )
{
    var num = numGroup.Key.ToString();

    ListBox7.Items.Add( num );

    if( numGroup.Count() > 1 )
    {
        ListBox8.Items.Add( num );
    }
}

可能的VB.Net翻译(可能不是100%准确但足够接近):

    Dim groupedNumbers = goArray.GroupBy( Function( n ) n )

    For Each numGroup In groupedNumbers
        Dim num = numGroup.Key.ToString()

        ListBox7.Items.Add( num )

        If numGroup.Count() > 1 Then
            ListBox8.Items.Add( num )
        End If
    Next