0

有没有办法可以从 C# 中的数组返回重复值?我还想编写一个小算法,该算法将返回数组中最多数量的重复值。例如

[1, 2,2,2 3,3] 我需要返回出现次数最多的重复值以及出现次数。

我想我看到一些帖子说它可以使用 Linq 完成,但我不知道 Linq 是什么

任何帮助将非常感激。

4

2 回答 2

4

尝试这个:

int[] data = new int[] { 1, 2, 2, 2, 3, 3 };
IGrouping<int, int> mostOccurrences = data
    .GroupBy(value => value)
    .OrderByDescending(group => group.Count())
    .First();

Console.WriteLine("Value {0} occurred {1} time(s).", mostOccurrences.Key, mostOccurrences.Count());

请注意,如果多个值出现的次数相同(例如,如果您在该列表中添加了另外 3 个),则上述代码将仅列出其中一个。要处理这种情况,请尝试以下操作:

int[] data = new int[] { 1, 2, 2, 2, 3, 3, 3 };
var occurrenceInfos = data
    .GroupBy(value => value)
    .Select(group =>
        new {
            Count = group.Count(),
            Value = group.Key
        }
    );
int maxOccurrenceCount = occurrenceInfos.Max(info => info.Count);
IEnumerable<int> maxOccurrenceValues = occurrenceInfos
    .Where(info => info.Count == maxOccurrenceCount)
    .Select(info => info.Value);

foreach (int value in maxOccurrenceValues)
    Console.WriteLine("Value {0} occurred {1} time(s).", value, maxOccurrenceCount);
于 2012-08-31T00:07:40.930 回答
2

这是我对此的看法:

var data = new[] { 1, 2, 2, 2, 3, 3, };

var occurences =
    data
        .ToLookup(x => x)
        .ToDictionary(x => x.Key, x => x.Count());

var mostOccurences =
    occurences
        .OrderByDescending(x => x.Value)
        .First();

这些将为您提供以下结果:

结果

于 2012-08-31T01:55:15.867 回答