2012-02-02 69 views
0

相比基本上我有和大小不等的整数数组。我需要将每个号码与其他号码进行比较,并显示重复的号码。例如:整数数组整数VB.NET

Dim ints() As Integer = {1,2,2,5,4,6} 

显示一次以上的数量为2。

如何可以通过阵列上运行,并且每个整数与阵列中的数字进行比较。我尝试了一个for循环,但它没有返回我正在寻找的值。我是VB.NET新手,并不完全理解。

+0

你能为循环添加?然后,我们可以提供什么是不正确的提示。 – 2012-02-02 13:45:34

回答

1
Dim ints() As Integer = {1,2,2,5,4,6} 

Dim repeatedNumbers = ints.GroupBy(Function(intValue) intValue) _ 
          .Where(Function(grp) grp.Count > 1) 

For each grp in repeatedNumbers 
    Console.WriteLine("Number {0} is repeated {1} times", grp(0), grp.Count) 
Next 

这段代码的含义:

  • 我们首先调用的GroupBy,这组项目通过自己的价值。函数获取分组键,在这种情况下,我们只需按数组的值本身进行分组。该呼叫返回一组 组。数组中的每个唯一值都有一个组。 组包含与唯一值对应的所有项目。所以如果一个值在数组中出现两次,将会有一个包含这个值的两个整数的组。
  • 我们呼吁在哪里筛选组。我们只需要计数大于1的组,以便只考虑重复值。
  • 我们再通过结果循环。 grp(0)为我们提供了组中的第一个数字(我们可以选择组中的任何数字,因为组中的所有数字都是相同的!),Count属性给我们重复的次数。
+0

感谢您的回复,此解决方案效果最佳。我的问题是'Function(x)'和'Function(grp)'是什么,我只是想确保我完全理解我得到的是什么。 – 2012-02-02 16:02:48

+0

它们是lambda表达式,通常与GroupBy和Where等Linq函数一起使用。请检查下面的MSDN链接lambda表达式:http://msdn.microsoft.com/en-us/library/bb531253.aspx – 2012-02-02 16:34:18

+0

我还编辑了答案,试图解释代码做什么。希望能帮助到你 – 2012-02-02 17:03:55

0

我会像这样尝试:

Dim ints() As Integer = {1, 2, 2, 5, 4, 6} 
    Array.Sort(ints) 
    For i = 1 To ints.GetUpperBound(0) 
     If ints(i) = ints(i - 1) Then MessageBox.Show(String.Format("{0} is repeated", ints(i))) 
    Next 

做这这样的排序阵列上保留下来的嵌套。

我没有测试这一点,但它应该是沿着正确的线路。

+1

不是一个错误的解决方案,但如果一个数字出现两次以上,您将看到两个或更多的消息。 – 2012-02-02 14:01:06

+0

我很简单地开始工作,但是,你是对的,它可能更微妙。 – 2012-02-02 14:12:45

0

你可以使用LINQ找到重复:

Dim repeating = (From n In ints 
       Group By n Into Dups = Group 
       Where Dups.Count > 1 
       Select Dups.First).ToArray() 

这将返回只包含不在原始数组中唯一的数字整数数组。

因此,这显示了重复号码:

MessageBox.Show(String.Format("Duplicates found: {0}", String.Join(","c, repeating)))