【问题标题】:Identify duplicates in VB array识别 VB 数组中的重复项
【发布时间】:2014-04-08 22:00:43
【问题描述】:

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

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

Private Sub btnAdd_Click(sender As Object, e As EventArgs) 处理 btnAdd.Click

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

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

【问题讨论】:

  • 使用 LINQ 扩展方法:Dim uniques = numbers.Distinct().ToArray().
  • @Styxxy:Distinct 方法不会删除具有重复项的值,它只会删除重复项并为每个值保留一个。

标签: arrays vb.net duplicates


【解决方案1】:

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

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

【讨论】:

  • 很抱歉,这比新手级别高出很多...我什么都不懂...
【解决方案2】:

我认为@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()))

【讨论】:

  • 好的,我想我遵循这个......但是如何将唯一值放入新的列表框中?
  • 使用 LINQ 获取唯一值:Dim unique = numbers.Except(duplicates).Distinct()。下一步是什么?如何在 ListBox 中显示unique
猜你喜欢
  • 1970-01-01
  • 2020-12-20
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 2015-10-18
  • 2011-11-16
  • 2021-08-01
相关资源
最近更新 更多