gpt4 book ai didi

c# - C# 中的简单 LINQ 问题

转载 作者:太空狗 更新时间:2023-10-29 22:04:17 24 4
gpt4 key购买 nike

我正在尝试使用 LINQ 返回出现最大次数的元素及其出现的次数。

例如:我有一个字符串数组:

string[] words = { "cherry", "apple", "blueberry", "cherry", "cherry", "blueberry" };

//...
Some LINQ statement here
//...

在此数组中,查询将返回 cherry 作为最大出现元素,3 作为它出现的次数。如果有必要,我也愿意将它们分成两个查询(即,第一个查询获取 cherry,第二个查询返回 3 的计数

最佳答案

目前给出的解决方案是O(n log n)。这是一个 O(n) 解决方案:

var max = words.GroupBy(w => w)
.Select(g => new { Word = g.Key, Count = g.Count() })
.MaxBy(g => g.Count);
Console.WriteLine(
"The most frequent word is {0}, and its frequency is {1}.",
max.Word,
max.Count
);

这需要 MaxBy 的定义。这是一个:

public static TSource MaxBy<TSource>(
this IEnumerable<TSource> source,
Func<TSource, IComparable> projectionToComparable
) {
using (var e = source.GetEnumerator()) {
if (!e.MoveNext()) {
throw new InvalidOperationException("Sequence is empty.");
}
TSource max = e.Current;
IComparable maxProjection = projectionToComparable(e.Current);
while (e.MoveNext()) {
IComparable currentProjection = projectionToComparable(e.Current);
if (currentProjection.CompareTo(maxProjection) > 0) {
max = e.Current;
maxProjection = currentProjection;
}
}
return max;
}
}

关于c# - C# 中的简单 LINQ 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4888537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com