【问题标题】:Array of Integers Comparing Integers VB.NET整数数组比较整数 VB.NET
【发布时间】:2012-02-03 01:02:51
【问题描述】:

基本上我有一个大小不同的整数数组。我需要将每个数字与其他数字进行比较并显示重复的数字。例如:

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

多次出现的数字是2。

如何遍历数组并将每个整数与数组中的数字进行比较。我尝试了一个 for 循环,但它没有返回我正在寻找的值。我是 VB.NET 新手,不太了解。

【问题讨论】:

  • 你能添加你的for循环吗?然后,我们也许能够提供有关不正确之处的提示。

标签: vb.net


【解决方案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,它按项目的值对项目进行分组。函数获取分组键,在这种情况下,我们只需按数组的值本身进行分组。此调用返回一个序列 团体。数组中的每个唯一值都有一组。这 group 包含与唯一值对应的所有项目。因此,如果一个值在数组中出现两次,就会有一个组包含两个具有该值的整数。
  • 我们调用过滤组的位置。我们只需要计数大于 1 的组,以便只考虑重复值。
  • 然后我们循环遍历结果。 grp(0) 为我们提供组中的第一个数字(我们可以选择组中的任何数字,因为组中的所有数字都是相同的!)并且 Count 属性为我们提供重复次数。

【讨论】:

  • 感谢您的回复,这个解决方案效果最好。我的问题是Function(x)Function(grp) 是什么我只是想确保我完全理解我是如何得到我得到的。
  • 它们是 lambda 表达式,通常与 GroupBy 和 Where 等 Linq 函数一起使用。检查以下 MSDN 链接以获取 lambda 表达式:msdn.microsoft.com/en-us/library/bb531253.aspx
  • 我还编辑了答案,试图解释代码的作用。希望对你有帮助
【解决方案2】:

我会尝试这样的:

    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

在已排序的数组上这样做可以减少嵌套。

我没有对此进行测试,但它应该是正确的。

【讨论】:

  • 不错的解决方案,但如果一个数字出现两次以上,您将看到该数字的两条或更多消息。
  • 我选择了简单的开始,但是你说得对,它可能更微妙。
【解决方案3】:

您可以使用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)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2013-08-24
    • 2013-07-10
    • 1970-01-01
    相关资源
    最近更新 更多