根据另一个集合项目对项目进行排序

Posted

技术标签:

【中文标题】根据另一个集合项目对项目进行排序【英文标题】:Sort item based on another collection item 【发布时间】:2022-01-06 02:13:47 【问题描述】:

我想对一个对象进行排序,并根据 LINQ 中的另一个集合项对对象进行排序。假设我有一个对象如下:

 [0] =  ID: 1090 , Name : Test1 
 [1] =  ID: 120 , Name : Test2 
 [2] =  ID: 1240 , Name : Test3 

要根据这个项目集合进行排序

 ColItem : [0] = 1240
 [1] = 120
 [2] = 1090

所以预期的输出应该是:

 [0] =  ID: 1240 , Name : Test3 
 [1] =  ID: 120 , Name : Test2 
 [2] =  ID: 1090 , Name : Test1 

我知道我可以通过在 ColItem 中执行循环来做到这一点,然后从对象映射 ID 字段中的值。但我想用一行代码在 LINQ 中完成。那可能吗?那么,如何在 LINQ 中使用单个查询来做到这一点?

【问题讨论】:

这能回答你的问题吗? Sort a collection based on another collection 使用 LINQ 在 C# 中排序列表? ***.com/questions/4003835/… 【参考方案1】:

以下代码适用于您的目的,但这不是我非常喜欢的:

class Collection1

    public int ID  get; set; 

    public string Name  get; set; 


class Collection2

    public int ID  get; set; 

...

var result = collection1s
      .Join(collection2s.Select((x, i) => new  Index = i, x.ID ), 
          c1 => c1.ID, c2 => c2.ID, (c1, c2) => new  c2.Index, c1.ID, c1.Name )
      .OrderBy(x => x.Index)
      .Select(x => new Collection1()  ID = x.ID, Name = x.Name  )
      .ToList();

我使用joinID的两个集合,然后使用第二个集合索引对结果进行排序,最后创建一个新对象作为第一个集合的类型。

【讨论】:

以上是关于根据另一个集合项目对项目进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何根据3个项目对Dart集合进行排序?

在 Java 中,如何根据另一个列表对一个列表进行排序?

使用Linq根据每个项目中的值的总和对列表进行排序

根据连续项目的相似性对双边项目列表进行排序

nsfetchedresultscontroller 根据项目计数对部分进行排序

根据 Kohana 中另一个表中的数据对 mysql 结果进行排序