收集定制重新排序

时间:2011-08-02 12:46:32

标签: .net collections

我有项目集合,每个项目都有int TypeId属性。我需要对此集合中的项目进行重新排序(或获取新项目),其中项目是按顺序排序的,因此首先所有项目都为TypeId = 3,然后是TypeId = 1,然后是TypeId = 2
我的解决方案是:

var result = new List<A>();
result.AddRange(source.Where(i => i.TypeId == 3));
result.AddRange(source.Where(i => i.TypeId == 1));
result.AddRange(source.Where(i => i.TypeId == 2));

我想知道,有没有其他快速解决方案没有多次迭代source集合(可能是一些LINQ技巧)?

1 个答案:

答案 0 :(得分:3)

您只需创建一个订单序列数组,并在OrderBy语句中使用它,只需询问索引即可。这是伪逻辑(我不记得IndexOf是否可用于本机数组,但如果不是只使用其他集合类型)

  int[] order = new int[] { 3, 1, 2};
  source.OrderBy(i => Array.IndexOf(order, i.TypeId));

- 根据Luke的评论编辑了这个例子,以便它能正确编译