2016-04-20 101 views
0

我有兩個列表,其中一個列表是其中一個子集的修改子集。例如:按另一個不完整和修改列表的順序排序列表

List<string> list1 = new List<string>(){ "A1", "A2", "A3" }; 
List<string> list2 = new List<string>() { "AA2", "B1", "B2", "AA1", "B3", "AA2" }; 

我要排序的第二個列表有像第一個類似的命令,看起來像這樣:

List<string> list2 = new List<string>() { "AA1", "AA2", "AA3", "B1", "B2", "B3" }; 

我怎樣才能做到這一點?

+0

如何被修改的項目? –

+2

爲了做到這一點,「相似的順序」必須更好地定義......規則是什麼? – Th0rndike

+1

從列表的角度來看,您的第二個列表不是第一個列表的「子集」。這些條目看起來像第一個,但它們不是子集。在你的例子中,你需要一些邏輯來知道AA1是「A1」定義的「子集」。然後,您可以查看第一個列表,並找出每個項目的某個子集的項目,然後按照該順序創建一個新列表。 – Tombala

回答

0

假設list1項目是list2項目子集(子),你可以使用Linqstring功能做這樣的事情。我不確定它是最佳的,但工作。歡迎提出建議來改進答案。

的想法是找到list1項目的索引相應List2項目(如果項目未找到,那麼最大指數),然後Sort基於通過串/項指數ThenBy

List<string> list1 = new List<string>(){ "A1", "A2", "A3" }; 
    List<string> list2 = new List<string>() { "AA2", "B1", "B3", "AA1", "B2", "AA3" }; 


    var results = list2.Select(s=> 
    { 
     var ind = list1.IndexOf(list1.Find(f=> s.Contains(f))); 

     return new 
     { 
      index= ind==-1? int.MaxValue : ind, // assign max value if item is not found to place in the end in order. 
      item =s 
     }; 

    }).OrderBy(o=>o.index).ThenBy(o=>o.item).Select(s=>s.item); 

輸出

AA1 
AA2 
AA3 
B1 
B2 
B3 

入住這Demo