我需要按層次結構對列表進行排序,有人可以幫我一把嗎?名單如下:按層次結構排序列表
// create your list
List<Person> persons = new List<Person>();
// populate it
persons.Add(new Person("child", "father"));
persons.Add(new Person("father", "grandfather"));
persons.Add(new Person("grandfather", "grandgrandfather"));
persons.Add(new Person("grandgrandfather", null));
我想是這樣的:
- grandgrandfather
- 爺爺
- 父親
- 孩子
我tryed來實現IComparable在我的類「人」中,像這樣:
public class Person : IComparable<Person>
{
public String ID { get; set; }
public String ParentID { get; set; }
public Person(String id, String pid)
{
this.ID = id;
this.ParentID = pid;
}
public Int32 CompareTo(Person right)
{
if (this.ID.Equals(right.ID))
return 0;
if (this.ParentID == null) return -1;
if (right.ParentID == null) return 1;
return this.ParentID.CompareTo(right.ID);
}
}
但沒有做的事...
您無法實現IComparable,因爲您必須知道集合中的其他項目才能比較它們。你有什麼機會讓你的人類擁有一個int generation屬性,並說他們是第一代,第二代或第三代? – Daryl
你需要一個拓撲排序,就像http://stackoverflow.com/questions/7788364/building-ordering-a-tree-as-a-list-in-c-sharp/7789273#7789273。我們需要更多關於您的實際問題的細節才能夠提供更多幫助。 – Gabe