我想比较由随机值提供的数组的元素,以查看是否没有在我的数组中第二次添加此值
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]);
}
}
答案 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