识别VB数组中的重复项



我需要为数组生成一个随机(整数)元素列表,然后显示唯一的值。获取随机元素很容易:

Dim ro As New Random
Dim numbers(19) As Integer
Dim counter As Integer

Private Sub btAddd_Click(发送方为对象,e为EventArgs)处理btAdd.Click

  numbers(counter) = ro.Next(10, 101)
  lstNumEntered.Items.Add(numbers(counter))
  counter += 1

好的,现在我必须在另一个列表框中显示任何/所有不重复的值,所以首先我必须识别重复的值。这就是我被卡住的地方。。。。。这个解决方案必须是新手级别的,否则你会失去我。

您可以根据值对数组进行分组,并且包含多个项目的组是重复的:

Dim duplicates As List(Of Integer) = _
  numbers.GroupBy(Function(n) n) _
  .Where(Function(g) g.Count() > 1) _
  .Select(Function(g) g.First) _
  .ToList()

我认为@Guffa指出的LINQ是完成这项任务最方便的方法。但是,您也可以通过基本的For循环操作来实现这一点。

有一个临时集合来存储不同的值(以下示例中为distinct),然后在每次For循环迭代中,如果您遇到该集合中已经存在的数字,则您确切地知道该数字是重复的:

'variable to store distinct numbers (either duplicated or not)
Dim distinct As New List(Of Integer)
'variable to store duplicated numbers
Dim duplicates As New List(Of Integer)
For i As Integer = 0 To numbers.Length - 1
    'if distinct doesn't contain number(i), means this number isn't duplicated SO FAR
    If Not distinct.Contains(numbers(i)) Then
        distinct.Add(numbers(i))
    'else, means distinct already contains the number, means this numbers(i) is a DUPLICATE
    'if the number hasn't been added to duplicates, add it
    ElseIf Not duplicates.Contains(numbers(i)) Then
        duplicates.Add(numbers(i))
    End If
Next
'following lines are for debugging purpose only
'print all numbers
Console.WriteLine(String.Join(",", numbers.Select(Function(x) x.ToString()).ToArray()))
'print all duplicates
Console.WriteLine(String.Join(",", duplicates.Select(Function(x) x.ToString()).ToArray()))
'print distinct numbers
Console.WriteLine(String.Join(",", distinct.Select(Function(x) x.ToString()).ToArray()))

最新更新