C# 按与C中另一个列表相同的顺序排列列表对象#
我有一个C# 按与C中另一个列表相同的顺序排列列表对象#,c#,linq,list,C#,Linq,List,我有一个列表对象,如下所示: var list1 = new List<DummyObject> { new DummyObject { ID="1", UniqueCode="ltrasd8ShFwNEyWrPTd9jIJJQ" }, new DummyObject { ID="2", UniqueCode="GB456rpcpxRYEeOr32w5oRMwg" }, new DummyObject { ID="3", Uniqu
列表
对象,如下所示:
var list1 = new List<DummyObject> {
new DummyObject { ID="1", UniqueCode="ltrasd8ShFwNEyWrPTd9jIJJQ" },
new DummyObject { ID="2", UniqueCode="GB456rpcpxRYEeOr32w5oRMwg" },
new DummyObject { ID="3", UniqueCode="Y7twLumNJU6dQZLR0KxqA" },
new DummyObject { ID="4", UniqueCode="nG3vejzzxkiO21oDt58vkw" },
new DummyObject { ID="5", UniqueCode="aPwwG1JMYUGTvOL2lG0YFg" },
}
var output= new List<DummyObject> {
new DummyObject { ID="2", UniqueCode="ltrasd8ShFwNEyWrPTd9jIJJQ" },
new DummyObject { ID="4", UniqueCode="GB456rpcpxRYEeOr32w5oRMwg" },
new DummyObject { ID="5", UniqueCode="Y7twLumNJU6dQZLR0KxqA" },
new DummyObject { ID="1", UniqueCode="nG3vejzzxkiO21oDt58vkw" },
new DummyObject { ID="3", UniqueCode="aPwwG1JMYUGTvOL2lG0YFg" },
}
我想通过
list2
对list1
进行排序,结果如下:
var list1 = new List<DummyObject> {
new DummyObject { ID="1", UniqueCode="ltrasd8ShFwNEyWrPTd9jIJJQ" },
new DummyObject { ID="2", UniqueCode="GB456rpcpxRYEeOr32w5oRMwg" },
new DummyObject { ID="3", UniqueCode="Y7twLumNJU6dQZLR0KxqA" },
new DummyObject { ID="4", UniqueCode="nG3vejzzxkiO21oDt58vkw" },
new DummyObject { ID="5", UniqueCode="aPwwG1JMYUGTvOL2lG0YFg" },
}
var output= new List<DummyObject> {
new DummyObject { ID="2", UniqueCode="ltrasd8ShFwNEyWrPTd9jIJJQ" },
new DummyObject { ID="4", UniqueCode="GB456rpcpxRYEeOr32w5oRMwg" },
new DummyObject { ID="5", UniqueCode="Y7twLumNJU6dQZLR0KxqA" },
new DummyObject { ID="1", UniqueCode="nG3vejzzxkiO21oDt58vkw" },
new DummyObject { ID="3", UniqueCode="aPwwG1JMYUGTvOL2lG0YFg" },
}
var输出=新列表{
新的DummyObject{ID=“2”,UniqueCode=“ltrasd8ShFwNEyWrPTd9jIJJQ”},
新的DummyObject{ID=“4”,UniqueCode=“GB456RPCPxRyeor32W5ORMWG”},
新的DummyObject{ID=“5”,UniqueCode=“Y7twLumNJU6dQZLR0KxqA”},
新的DummyObject{ID=“1”,UniqueCode=“nG3vejzzxkiO21oDt58vkw”},
新的DummyObject{ID=“3”,UniqueCode=“aPwwG1JMYUGTvOL2lG0YFg”},
}
谁能在这里指导我如何使用
LINQ
?您可以用LINQ这样做:
var output = list1.OrderBy(dummyObject => list2.IndexOf(int.Parse(dummyObject.ID))).ToList();
var result = list1.OrderBy(x => list2.IndexOf(Convert.ToInt32(x.ID))).ToList();
如果列表很小,则可以这样做:
var output = list1.OrderBy(dummyObject => list2.IndexOf(int.Parse(dummyObject.ID))).ToList();
var result = list1.OrderBy(x => list2.IndexOf(Convert.ToInt32(x.ID))).ToList();
如果列表较大,则以下解决方案的性能会更好:
//Create a dictionary that maps the integer values of the IDs to the objects
var dictionary = list1.ToDictionary(x => Convert.ToInt32(x.ID), x => x);
var result = list2.Select(x => dictionary[x]).ToList();
Join
保留外部序列元素的顺序(list2
),对于其每个元素,保留内部序列匹配元素的顺序(list1
)
试试这个
var _orderedList = (from l2 in list2 join l1 in list1 on l2 equals int.Parse(l1.ID) select l1).ToList();