如何在它们之间比较单个数组的元素

时间:2019-08-01 15:22:42

标签: c#

我想比较由随机值提供的数组的元素,以查看是否没有在我的数组中第二次添加此值

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]);
    }
}

3 个答案:

答案 0 :(得分:1)

var hasDuplicates = elements
    .GroupBy(entry => entry)
    .Select(group => new { Entry = group.Key, Count = group.Count() })
    .Where(group => group.Count > 1).Count() > 0;

答案 1 :(得分: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 :(得分:0)

使用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

相关问题