【问题标题】:how to compare the elements of a single array between themselves如何比较单个数组的元素
【发布时间】:2019-12-10 05:52:08
【问题描述】:

我想比较由随机值提供的数组的元素,看看这个值是否没有第二次添加到我的数组中

static void Main(string[] args)
{
    Random rand = new Random();

    int[] elements = new int[8];
    int lo = rand.Next(1, 49);
    for (int i = 0; i < elements.Length; i++)
    {
        lo = rand.Next(1, 49);
        elements[i] = lo;
    }

    for (int i = 0; i < elements.Length; i++)
    {
        if (elements[i] == elements[elements.Length - 2])
        {

        }
    }

    for (int x = 0; x < elements.Length; x++)
    {
        Console.WriteLine(elements[x]);
    }
}

【问题讨论】:

  • 也许你想使用标准的HashSet&lt;int&gt;?它保证元素是唯一的
  • 你的问题是什么?
  • 我认为这是相关的,甚至由@TimSchmelter stackoverflow.com/a/18304070/7002366回答了

标签: c#


【解决方案1】:

其他答案正确解决了您使用GroupBy 检测是否有任何重复条目的问题。但是,如果您的意图是用数组中不存在的新条目替换这些重复条目,则可以使用以下方法 -

        Random rand = new Random();

        int[] elements = new int[8];
        int lo;
        for (int i = 0; i < elements.Length; i++)
        {
            do
                lo = rand.Next(1, 49);
            while (elements.Contains(lo));
            elements[i] = lo;
            Console.WriteLine(elements[i]);
        }

此代码将保证elements 数组始终具有唯一值。

注意:- do...while 循环不断生成随机数,除非它找到唯一的数字。因此,如果您的数组大小大于生成的随机数范围,您将陷入无限循环。

【讨论】:

  • 非常感谢您的回答非常出色和准确,并且符合我的期望
【解决方案2】:
var hasDuplicates = elements
    .GroupBy(entry => entry)
    .Select(group => new { Entry = group.Key, Count = group.Count() })
    .Where(group => group.Count > 1).Count() > 0;

【讨论】:

    【解决方案3】:

    使用 linq 的强大功能,您可以使用 GroupBy 来查找您的重复项。

    另外,Enumerable.Range 是一种快速生成列表的方法。

    public static void Main()
    {
        var rand = new Random();
    
        var elements = Enumerable.Range(0, 8).Select(_ => rand.Next(1, 49));
    
        var duplicates = elements.GroupBy(x => x).Where(x => x.Count() > 1).ToArray();
    
        if (duplicates.Any())
        {
            Console.WriteLine("duplicates found");  
        }
        else
        {
            Console.WriteLine("no duplicates"); 
        }
    }
    

    如果您需要对重复项采取行动,您可以对其进行迭代并使用.Key

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 2011-01-13
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多