2016-05-30 162 views
1

我有兩種不同類型的兩個通用列出存儲:基於另一個排序列表?

class A { 
    public int id; 
    //... 
} 
class B { 
    public int id; 
    //... 
} 

他們有着相似的屬性,則id。現在,一個列表中有對象的一定的順序和它們的ID,第二個具有完全不同的定購ID:

List<A> listA; // the ids of objects inside go as follows: 4, 5, 1 
List<B> listB; // the ids of objects inside go as follows: 1, 4, 5 

我想排序數組listB使listB[0].id==listA[0].idlistB[1].id==listA[1].id等想過使用Join但沒有想點什麼投入OrderBy

+0

你爲什麼不創建一個類'Mother'一個ID,讓你的兩個類繼承它,然後排序呢? –

+2

'listB [1] .id == listA [2] .id'不應該是'listB [1] .id == listA [1] .id'? – Nasreddine

+0

@Nasreddine是的,修正的,thx – user1255410

回答

1

可以暫時通過該指數創建一個包含所需的指數匿名對象,然後排序:

var result = listB.Select((b, index) => 
        new {Index = listA.FindIndex(a => a.id == b.id), 
          B = b}) 
        .OrderBy(b => b.Index) 
        .Select(b => b.B).ToList(); 

所以第一Select創建一個包含匹配的元素的IndexlistA對象序列。
然後按該索引對該序列進行排序,最後Select以正確的順序給出listB的實例。

1

剛剛經歷List<A>逐項進行迭代,找到的List<B>源實例對應B項目並將其存儲到另一個的List<B>目標實例。你完成了。

List<B> destinationListB = new List<B>(); 
foreach (A in listA) 
{ 
    B b = listB.FirstOrDefault(item => item.id = A.id); 
    if (b != nul) destinationListB.Add(b); 
} 

免責聲明:可能有更省時的解決方案。