【问题标题】:How to sort the list by descending order如何按降序对列表进行排序
【发布时间】:2022-01-06 05:54:27
【问题描述】:
public class Items {
   public string Name {get; set;}
   public int Id {get; set;}
   public List<string> SubItems {get; set;}
}

上面是我的课。 在我的代码中的某处,我正在使用 List 并添加记录。

List<Items> listOfItems = new List<Items>();
listOfItems.OrderByDescending(i => i.SubItems).ToList();

listOfItems 有一些数据。 我想通过 LINQ 查询订购 listOfItems 列表中的 SubItems

【问题讨论】:

  • 您在选择结果时是否尝试过.OrderBy()
  • 试过了。不适合我
  • @Sherlock 它怎么不起作用?另外,您希望如何订购SubItems?通过它的Id?通过它的Name?通过它在记忆中的位置?你错过了一半的问题。
  • SubItems 是一个 List 但它的值类似于低于 1.0、1.2、1.5、1.9、2.0 的版本。 @KieranDevlin
  • 那么您应该添加您尝试过的内容以及为什么它不适合您。

标签: c# linq


【解决方案1】:

您无法使用 LINQ 来做到这一点,因为 LINQ 是 查询,并且您希望更改您的数据,而不是从数据中查询某些内容。但是您仍然可以使用序数循环对每个 Item 的内容进行排序

listOfItems.ForEach(x=>x.SubItems.Sort((a, b) => b.CompareTo(a)))

listOfItems.ForEach(x=>x.SubItems = x.SubItems.OrderByDescending(i => i)))

【讨论】:

  • 你能帮我解决这个问题吗? listOfItems.ForEach(x => x.SubItems.AddRange(serviceVersions)); listOfItems.ForEach(x => x.SubItems.Sort((a, b) => b.CompareTo(a)));如何结合 foreach 循环并进行单个查询并进行排序@Serg
  • 只需将 AddRangeSort 加入单个 lambda。 listOfItems.ForEach(x =&gt; {x. SubItems.AddRange(serviceVersions); x. SubItems.Sort((a, b) =&gt; b.CompareTo(a));});。或者只是用序号foreach 循环替换ForEach 方法。这可能会提高可读性。
【解决方案2】:

我认为这里的问题是 OrderBy() 返回新列表,您目前没有将其存储在任何地方。所以应该是:

List<Items> listOfItems = new List<Items>();

var orderedList = listOfItems.OrderByDescending(i => i.SubItems).ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-03
    • 2015-10-19
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2016-10-18
    • 2013-08-13
    相关资源
    最近更新 更多