我有一个包含名称的字符串数组:
[Alex, Alex, Michael, Michael, Dave, Victor]
我转换为List<string>
然后,我需要编写一个函数,该函数返回列表中的最大重复项,但应按降序排序,在这种情况下为Michael。
我遵循了link中所述的LINQ代码。就是
string maxRepeated = prod.GroupBy(s => s)
.OrderByDescending(s => s.Count())
.First().Key;
但是,代码返回的是Alex而不是Michael。
我尝试添加另一个OrderByDescending
,但是它返回了Victor。
string maxRepeated = prod.GroupBy(s => s)
.OrderByDescending(s => s.Count())
.OrderByDescending(b => b)
.First().Key;
我被困住了,不知道需要添加什么才能达到预期的效果。
感谢您的帮助。
答案 0 :(得分:7)
第二个OrderByDescending
不会忽略先前的顺序,而是ThenByDescending
:
string maxRepeated = prod.GroupBy(s => s)
.OrderByDescending(g => g.Count())
.ThenByDescending(g => g.Key)
.First().Key;
答案 1 :(得分:1)
您可能需要在“ GroupBy”之后添加一个条件,以将其限制为具有多个项目的组。这基本上等同于SQL中的“具有”。我认为这可以满足您的要求:
prod.GroupBy(s => s)
.Where(group => group.Count() > 1)
.Select(group => group.Key)
.OrderByDescending(s => s)
.First();