相比基本上我有和大小不等的整数数组。我需要将每个号码与其他号码进行比较,并显示重复的号码。例如:整数数组整数VB.NET
Dim ints() As Integer = {1,2,2,5,4,6}
显示一次以上的数量为2。
如何可以通过阵列上运行,并且每个整数与阵列中的数字进行比较。我尝试了一个for循环,但它没有返回我正在寻找的值。我是VB.NET新手,并不完全理解。
相比基本上我有和大小不等的整数数组。我需要将每个号码与其他号码进行比较,并显示重复的号码。例如:整数数组整数VB.NET
Dim ints() As Integer = {1,2,2,5,4,6}
显示一次以上的数量为2。
如何可以通过阵列上运行,并且每个整数与阵列中的数字进行比较。我尝试了一个for循环,但它没有返回我正在寻找的值。我是VB.NET新手,并不完全理解。
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
这段代码的含义:
感谢您的回复,此解决方案效果最佳。我的问题是'Function(x)'和'Function(grp)'是什么,我只是想确保我完全理解我得到的是什么。 – 2012-02-02 16:02:48
它们是lambda表达式,通常与GroupBy和Where等Linq函数一起使用。请检查下面的MSDN链接lambda表达式:http://msdn.microsoft.com/en-us/library/bb531253.aspx – 2012-02-02 16:34:18
我还编辑了答案,试图解释代码做什么。希望能帮助到你 – 2012-02-02 17:03:55
我会像这样尝试:
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
做这这样的排序阵列上保留下来的嵌套。
我没有测试这一点,但它应该是沿着正确的线路。
不是一个错误的解决方案,但如果一个数字出现两次以上,您将看到两个或更多的消息。 – 2012-02-02 14:01:06
我很简单地开始工作,但是,你是对的,它可能更微妙。 – 2012-02-02 14:12:45
你可以使用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)))
你能为循环添加?然后,我们可以提供什么是不正确的提示。 – 2012-02-02 13:45:34