c# - 按属性和这些属性的有序数组对 IEnumerable<Object> 进行排序

标签 c# linq sorting

鉴于以下情况:

public class Foo
{
  /* other properties */

  public Int32 Id { get; set; }
}

var listOfFoo = new[]{
  new Foo { Id = 1 },
  new Foo { Id = 2 },
  new Foo { Id = 3 }
};
var sortOrderIds = new[]{
  2, 3, 1
};

如果我想对 listOfFoo 进行排序,使 Id 的最终顺序与 sortOrderIds 中显示的顺序相同,最好的方法是什么?我想我可以使用类似的方法进行排序:

Int32 SortUsingIdArrayAsReference(Foo x, Foo y)
{
  // creative license on "IndexOf", bear with me
  return Int32.CompareTo(sortOrderids.IndexOf(x.Id), sortOrderIds.indexOf(y.Id));
}

但这真的是最好的方法吗?我希望 LINQ 可能有更好的东西我可以使用,但如果没有的话也好。只是寻找其他输入,看看其他人是否有更好的方法。

最佳答案

您可以使用List.IndexOf

var ordered = listOfFoo.OrderBy(o => sortOrderIDs.IndexOf(o.Id));

编辑:由于 sortOrderIDs 是一个数组:

var ordered = listOfFoo.OrderBy(o => Array.IndexOf(sortOrderIds, o.Id));

或者,如果您想对列表和数组使用相同的方法,请将其转换为 IList:

var ordered = listOfFoo.OrderBy(o => ((IList)sortOrderIds).IndexOf(o.Id));

关于c# - 按属性和这些属性的有序数组对 IEnumerable<Object> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14511749/

相关文章:

c# - C# 中的枚举是否可以用于替换查找表(例如 SportType、MatchType)

linq - 我应该花时间学习 OR\M 或 LINQ 吗?

java - 在android中排序对象列表

python - 使用 pandas 对数据进行排序 - 根据其他列中的值对第一列进行排序

c# - 存储从套接字读取的数据以供另一个线程读取的最有效方法是什么?

c# - 可以在列表中存储对对象的引用吗?

c# - 在代码中为合法状态抛出异常

c# - 在基于行的数据集合中快速或简洁地确定每列最长的字符串

c# - Linq-to-SQL 3 表,获取结果为 List<string>

sql-server - Yii:对动态列进行排序和格式化