【问题标题】:List sorting C# using 2 fields使用 2 个字段对 C# 进行列表排序
【发布时间】:2013-08-27 02:10:12
【问题描述】:

我有一个我的自定义对象列表。该对象包含 1 个字符串和 2 个小数。我想根据第二个十进制字段降序然后第一个十进制字段对列表进行排序。

例如:

object 1 -> "a", 100, 10
object 2 -> "b", 300, 0
object 3 -> "c", 200, 200
object 4 -> "b", 400, 0

将被排序为对象 3、对象 1、对象 4、对象 2

如果这个问题已经得到解答,我深表歉意 - 请指点我那个帖子,因为我找不到它

【问题讨论】:

  • 你应该包含Properties namesobject,这样会更好。否则我猜回答者会suppose you have ... 甚至什么都不做。
  • 这已经回答了herehere

标签: c# list sorting lambda


【解决方案1】:
list.OrderByDescending(o => o.Field2)
    .ThenByDescending(o => o.Field1);

【讨论】:

    【解决方案2】:
    var ordered = objects.OrderByDescending(o => o.SecondDec)
                         .ThenByDescending(o => o.FirstDec);
    

    然后枚举它或创建另一个集合,例如通过ToList

    foreach(var obj in ordered)
    {
        // ...
    }
    

    【讨论】:

      【解决方案3】:

      其他答案显示了构造 IEnumerable 的好方法,枚举时,它会按照您描述的顺序生成列表中的项目。可以说,它提供了列表的“视图”,并且不会更改列表本身中项目的顺序。

      如果您确实想要对列表进行排序(即,就地更改列表以使其项目按顺序排列),您可以使用List<T>.Sort Method,如下所示:

      list.Sort((x, y) =>
      {
          int result = decimal.Compare(y.SecondDecimal, x.SecondDecimal);
          if (result == 0) 
              result = decimal.Compare(x.FirstDecimal, y.FirstDecimal);
          return result;
      });
      

      【讨论】:

        【解决方案4】:

        使用OrderByDescendingThenBy

        var sorted = items.OrderByDescending(item => item.Decimal2)
            ThenBy(item => item.Decimal1);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-03-11
          • 1970-01-01
          • 2011-07-09
          • 1970-01-01
          • 2020-07-14
          相关资源
          最近更新 更多