【发布时间】:2015-11-24 07:39:07
【问题描述】:
可以将对象列表排序为多个相互关联的对象组吗?
型号:
public class Item
{
public string Name {get;set;}
public List<Item> ConnectedItem {get;set;}
}
数据:
public void Data()
{
Item One = new Item() {};
Item Two = new Item() { };
Item Three = new Item() { };
Item Four = new Item() { };
Item Five = new Item() { };
Item Six = new Item() { };
Item Seven = new Item() { };
Item Eight = new Item() { };
Item Nine = new Item() { };
Item Ten = new Item() { };
One.ConnectedItem = new List<Item>(){Two,Three, Five};
Two.ConnectedItem = new List<Item>() { One, Five };
Three.ConnectedItem = new List<Item>() { Five, Two };
Four.ConnectedItem = new List<Item>() { One, Two };
Five.ConnectedItem = new List<Item>() { Four, One, Two ,Three };
Six.ConnectedItem = new List<Item>() { Eight };
Seven.ConnectedItem = new List<Item>() { Eight };
Eight.ConnectedItem = new List<Item>() { Six };
Nine.ConnectedItem = new List<Item>() { Ten };
Ten.ConnectedItem = new List<Item>() { Nine};
List<Item> items = new List<Item>(new List<Item>() {One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten });
}
我要归档的是相互关联的项目列表
-Collection1
----一、二、三、四、五
-Collection2
----六七八
-Collection3
----九、十
List<List<Item>> sortedList = new List<List<Item>>()
{
new List<Item>() {One, Two,Three,Four,Five},
new List<Item>() {Six,Seven,Eight},
new List<Item>() {Nine,Ten},
};
【问题讨论】:
-
我认为您需要详细说明究竟是什么使元素符合包含在这些集合之一中的条件。很可能有一种图论算法可以有效地确定这一点,但是如果没有指定精确的要求,人们将很难为您提供帮助。就此而言,您到目前为止尝试过什么?你比我们更了解这个问题,它的哪一部分让你绊倒了?推测,这看起来像你试图找到连接的传递闭包。有一些有效的方法来计算。
-
符合包含条件的是对每个 ConnectedItem 属性的引用。如果元素是链接的,那么它将引用另一个元素。我试图写一个递归方法,但碰壁了。任何帮助表示赞赏
标签: c# .net algorithm sorting tree