【问题标题】:C# linq to sort list based on rank from another list [duplicate]C#linq根据另一个列表中的排名对列表进行排序[重复]
【发布时间】:2020-06-10 12:54:59
【问题描述】:

我在 C# 中有两个列表

    var list1 = new List<int>() { 1,2,3,4};

    var list2 = new List<Rank>()
    {
    new Rank {Id = 1, SortOrder = 2},
    new Rank {Id = 2, SortOrder = 3},
    new Rank {Id = 3, SortOrder = 1},
    new Rank {Id = 4, SortOrder = 4}
   };

我想根据list2中的SortOrder对list1进行排序

结果

列表1 =
3,1,2,4

有没有办法在 LINQ 中做到这一点?

【问题讨论】:

  • LINQ orderBy 适用于单个列表,为什么不合并它们然后应用 orderBy 子句?
  • 这能回答你的问题吗? List sort based on another list
  • list2.OrderBy(x =&gt; x.SortOrder).Select(x =&gt; list1.FirstOrDefault(y =&gt; x.Id == y))

标签: c# linq


【解决方案1】:

你可以试试zip

var result = list1.Zip(list2, (l1, l2) => new { l1, l2 })
                  .OrderBy(pair => pair.l2.SortOrder)
                  .Select(pair => pair.l1)
                  .ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-17
    • 2011-03-22
    • 2013-09-12
    • 1970-01-01
    • 2018-01-03
    • 2023-04-01
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多