有两个班级:
public class Object1
{
public string Prop1 { get; set; }
}
public class Object2
{
public string Prop2 { get; set; }
}
并且:
List<Object1> A;
List<Object2> B;
需要按A
对列表Prop1
的元素进行排序,方法与列表B
中已Prop2
排序的方式相同。 Prop1
和Prop2
有重复,我无法删除我的解决方案中的重复项。所以我必须对列表A
进行排序:
修改2014/03/13 14:20
Prop1
集合不是唯一的,并且具有重复性(与Prop2
相同)
修改2014/03/13 15:23
一些例子。
我有这个:
var A = new List<Object1>
{
new Object1{Prop1 = "a_b_c"},
new Object1{Prop1 = "x_y_z"},
new Object1{Prop1 = "a_b_c"},
new Object1{Prop1 = "a_b"},
new Object1{Prop1 = "a"},
};
var B = new List<Object2>
{
new Object2{Prop2 = "a"},
new Object2{Prop2 = "a_b"},
new Object2{Prop2 = "a_b_c"},
};
预计在排序之后:
var expected = new List<Object1>
{
new Object1{Prop1 = "a"},
new Object1{Prop1 = "a_b"},
new Object1{Prop1 = "a_b_c"},
new Object1{Prop1 = "a_b_c"},
new Object1{Prop1 = "x_y_z"},
};
答案 0 :(得分:-1)
你很可能是必须的 在Enumerable.Intersect上查找共享对象类型和Enumerable.Except 第二种情况。
在那里,您可以实现自定义相等比较器来比较您的数据类型。
答案 1 :(得分:-1)
要按其他列表的顺序排序,您可以使用Join
。这保留了外部集合的顺序(即B
),您可以选择内部集合的元素作为结果,即A
。
var sortedA = B.Join (A, b => b.Prop2, a => a.Prop1, (b, a) => a).ToArray();
然后,您需要连接已排序集合中不存在的A元素。
var allA = A.Concat(A.Except(sortedA));