【问题标题】:Return unique list ordered by repeated/duplicated item count返回按重复/重复项计数排序的唯一列表
【发布时间】:2013-02-02 18:54:33
【问题描述】:

什么是我正在寻找的结果的最有效途径?我正在使用 ASP.NET 4.5 和 C#。

假设我有以下int 列表:

5,7,2,7,8,5,8,0,2,9,8,8,7

我想从列表中删除重复项并按每个项目的出现次数对其进行排序。我知道我可以使用 LINQ 的 Distinct() 使项目独一无二,但我怎样才能让它按出现次数排序?这是上述示例的预期结果:

8,7,5,2,0,9

【问题讨论】:

  • 我没有投反对票,但我想投反对票的人是因为你缺乏努力。
  • 我做了很多努力,我认为没有必要展示我荒谬的循环来弄清楚排序,因为我知道这是错误的。
  • 在提出问题时总是需要展示你的努力。没有荒谬的努力。有努力。每个人都在学习,如果有人告诉你你的努力很荒谬,你可以告诉他他很荒谬。

标签: c# asp.net linq list distinct


【解决方案1】:

您可以对项目进行分组,然后按每组中的数量对它们进行排序:

var items = new[] { 5, 7, 2, 7, 8, 5, 8, 0, 2, 9, 8, 8, 7 };
var result = items
    .GroupBy(x => x)
    .OrderByDescending(x => x.Count())
    .Select(x => x.Key);

【讨论】:

  • 为什么需要最后的 Distinct?
  • 不需要。 GroupBy 已经消除了重复的条目。
  • 正确,根本不需要。对我来说,这是一个糟糕的复制粘贴。感谢您指出这一点。
【解决方案2】:
var ordered = list
    .GroupBy(x => x)
    .OrderByDescending(g => g.Count())
    .Select(g => g.Key);

【讨论】:

  • 将您的答案标记为答案,因为它是第一个答案。由于我正在使用 List 对象,因此最后应该有一个“.ToList()”。除此之外,你和达林的工作都很棒!
猜你喜欢
  • 1970-01-01
  • 2015-04-25
  • 2020-07-22
  • 2016-01-01
  • 2015-10-04
  • 2014-03-03
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多