有没有办法可以从 C# 中的数组返回重复值?我还想编写一个小算法,该算法将返回数组中最多数量的重复值。例如
[1, 2,2,2 3,3] 我需要返回出现次数最多的重复值以及出现次数。
我想我看到一些帖子说它可以使用 Linq 完成,但我不知道 Linq 是什么
任何帮助将非常感激。
尝试这个:
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);
这是我对此的看法:
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();
这些将为您提供以下结果: