Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在VB数组中识别重复项_Arrays_Vb.net_Duplicates - Fatal编程技术网

Arrays 在VB数组中识别重复项

Arrays 在VB数组中识别重复项,arrays,vb.net,duplicates,Arrays,Vb.net,Duplicates,我需要为数组生成一个随机(整数)元素列表,然后显示唯一值。获取随机元素很容易: Dim ro As New Random Dim numbers(19) As Integer Dim counter As Integer 私有子btnAdd_Click(发送者作为对象,e作为事件参数)处理btnAdd。单击 numbers(counter) = ro.Next(10, 101) lstNumEntered.Items.Add(numbers(counter)) counter +=

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

Dim ro As New Random
Dim numbers(19) As Integer
Dim counter As Integer
私有子btnAdd_Click(发送者作为对象,e作为事件参数)处理btnAdd。单击

  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()))

使用LINQ扩展方法:
Dim uniques=numbers.Distinct().ToArray()
@Styxxy:
Distinct
方法不会删除有重复项的值,它只删除重复项并保留每个值中的一个。非常抱歉,这远远超过了新手的水平……我一点都不懂……好的,我想我会遵循这一点……但如何将唯一值放入新的列表框?使用LINQ获取唯一值:
Dim unique=number.Except(duplicates).Distinct()
。下一步是什么?如何在列表框中显示
唯一