鉴于以下情况:
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
};
Run Code Online (Sandbox Code Playgroud)
如果我想排序listOfFoo以使Ids 以与 中所示的顺序相同的顺序结束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));
}
Run Code Online (Sandbox Code Playgroud)
但这真的是最好的方法吗?我希望 LINQ 可能有更好的东西我可以使用,但如果没有的话也好。只是寻找其他输入,看看其他人是否有更好的方法。
您可以使用List.IndexOf
var ordered = listOfFoo.OrderBy(o => sortOrderIDs.IndexOf(o.Id));
Run Code Online (Sandbox Code Playgroud)
编辑:因为sortOrderIDs是一个数组:
var ordered = listOfFoo.OrderBy(o => Array.IndexOf(sortOrderIds, o.Id));
Run Code Online (Sandbox Code Playgroud)
或者,如果您想对列表和数组使用相同的方法,请将其转换为IList:
var ordered = listOfFoo.OrderBy(o => ((IList)sortOrderIds).IndexOf(o.Id));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8443 次 |
| 最近记录: |