如何检查一个数组中是否有两个或多个相等的值?
例如。在这个例子中,我希望程序告诉我有一对2和一对4
int[] array1 = { 1, 2, 4, 2, 4 };
答案 0 :(得分:11)
使用Linq
var result = array1.GroupBy(i=>i)
.Select(g=>new {Value = g.Key, Count = g.Count()})
.Where(x=>x.Count>1)
.ToList();
foreach (var pair in result)
{
Console.WriteLine("PAIR: " + pair.Value + " COUNT: " + pair.Count);
}
答案 1 :(得分:3)
[编辑]抱歉,这回答了问题“如何检查一个数组中是否有两个或更多相等的值?”,但它并没有告诉您实际的重复项。
这可行,但可能不是最有效的方式!
int[] array1 = { 1, 2, 4, 2, 4 };
if (array1.Distinct().Count() < array1.Length)
Console.WriteLine("Contains Dupes");
如果您想要最有效的方法:
bool containsDupes(int[] array)
{
for (int i = 0; i < array.Length - 1; ++i)
{
int n = array[i];
for (int j = i+1; j < array.Length; ++j)
if (array[j] == n)
return true;
}
return false;
}
我认为你不能比这更有效率。它会在找到任何匹配后立即返回。
答案 2 :(得分:1)
您可以使用Linq语句,如:
var query =
from numbers in array1
group numbers by numbers into duplicates
where duplicates.Count() > 1
select new { Item = duplicates.Key, ItemCount = duplicates.Count() };
这将返回以下内容:
Item 2: ItemCount 2
Item 4: ItemCount 2
或者相同的另一种语法:
var query = array1.GroupBy(x => x)
.Where(x => x.Count() > 1)
.Select(x => new { x, Count = x.Count() });
答案 3 :(得分:0)
您可以使用LINQ的GroupBy
示例:
var grouped = array1.GroupBy(x => x).Select(x => new { Value = x.Key, Count = x.Count() });
foreach(var item in grouped) {
if (item.Count == 1)
continue;
Console.WriteLine("There are {0} instances of the number {1} in the array.", item.Count, item.Value);
}
答案 4 :(得分:0)
我喜欢这种语法:
int[] array1 = { 1, 2, 4, 2, 4 };
var isThereAnyRepeated = (from i in array1
group i by i into g
where g.Count() > 1
select g).Any();
Console.WriteLine(isThereAnyRepeated);
答案 5 :(得分:0)
这是I4V答案的略微变化。
而不是Select
和ToList
,而是使用ToDictionary
。
using System;
using System.Linq;
namespace StackOverflow_2013_05_27_EqualValuesInArray
{
class Program
{
static void Main(string[] args)
{
int[] array = { 1, 2, 4, 2, 4 };
var tbl = array
.GroupBy(n => n)
.Where(g => g.Count() > 1)
.ToDictionary(g => g.Key, g => g.Count());
foreach (var pair in tbl)
Console.WriteLine("{0} is in array {1} times", pair.Key, pair.Value);
Console.ReadLine();
}
}
}
答案 6 :(得分:-1)
class item
{
int value;
int number;
}
list<item> items = new list <item>();
for(int i=0; i<array1.length;i++)
{
if (i=0)
items.add(new item(array1[i],1))
else if (array1.contains(array[i])) items.add(new item(array1[i],))
else items.add(new item(array1[i],1))
}