2014-03-01 59 views
0

我的人List<Person>如何對嵌套物品進行排序?

public class Person 
{ 
    public int Id { get; set; } 

    public int ParentId { get; set; } 

    public List<Person> Childs { get; set; } 
} 

,所以我想對它進行排序有人員名單沒有ParentId和一個人的所有兒童都加入到他的Childs的普通列表。我不知道該怎麼做,有什麼提示?

+0

我想'ParentId'應該是類型''INT對於初學者? –

+0

你想用'Id'來排序嗎? –

+0

@GrantWinney yes,'0'或null – user3293835

回答

1

我不確定你在問什麼,但似乎你正在試圖從樹狀結構形成單一dimmentional列表Person

var dict = source.ToDictionary(x => x.Id); 

foreach(var p in source) 
    if(p.ParentId != 0) 
     dict[p.ParentId].Childs.Add(p); 

var topLevel = source.Where(p => p.ParentId == 0).ToList(); 

我假設ParentId == 0表示沒有父項,並且該項目是頂級項目。

+0

非常感謝你 – user3293835

+0

我覺得最後一句話是'dict.Where(..' – user3293835

+0

@ user3293835不要緊,因爲它們都包含相同的項目,只是形式不同。 – MarcinJuraszek

1

這應該工作一種享受:

var lookup = people.ToLookup(p => p.ParentId); 

foreach (var person in people) 
{ 
    person.Childs = lookup[person.Id].ToList(); 
} 

如果Childs集合已經實例,然後使用此:

person.Childs.AddRange(lookup[person.Id]); 
相關問題