2014-03-13 148 views
0

有兩個類:排序C#列表

public class Object1 
{ 
    public string Prop1 { get; set; } 
} 

public class Object2 
{ 
    public string Prop2 { get; set; } 
} 

而且有:

List<Object1> A; 
List<Object2> B; 

需要由Prop1同樣的方式列表A的元素進行排序,因爲他們在列表B已排序與Prop2Prop1Prop2有重複,我不能刪除我的解決方案中的重複項。所以,我必須這樣排序列表A

  1. 首先進入列表A的對象與PROP1與由PROP2排序名單B(B名單已經訂購)
  2. 然後進入名單的對象列表B的對象A與prop1不存在的列表B中與Prop2屬性。

編輯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

你知道排序的類型嗎?你知道列表B是如何分類的嗎?您可以再次使用該排序方法。 –

+0

你想排序'A'或它們的屬性'Prop1'。那麼你需要訂購內部收集還是外部?如果是後者,你想如何通過內部集合對外部集合進行分類?他們有什麼關係?你能提供一個例子嗎? –

+0

我不得不說,這可能不是最好的英語,但我很清楚這個問題是什麼。 –

回答

-1

你最有可能,你必須 外觀上Enumerable.Intersect共享對象類型和Enumerable.Except 對於第二種情況。

在那裏你可以實現自定義相等比較器來比較你的數據類型。

+0

@downvoters:原因??? – Tigran

+0

upvoted它的好處! @Tigran;) – Sebi

-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)); 
+0

所以你「發現問題很清楚」是什麼? 'Prop1'和'Prop2'是集合而不是單個字符串;-)這根本不起作用,它只是編譯,因爲集合將通過引用進行比較,這不是OP想要的。 –

+0

但如果Prop2和Prop1不都是唯一的呢? Prop1集合可能有重複。 Prop2可能有重複。在我的工作解決方案中,我不能刪除Prop1和Prop2中的重複。 –

+0

@TimSchmelter Prop1和prop2是字符串。 '公共字符串Prop1 {get;組; 「我不確定你在說什麼? –