c# - Building a tree out of items list -
i suggestions on how can build tree out of items list in efficient way
public class item { public item(int id, int? parentid) { id = id; parentid = parentid; } public int id { get; private set; } public int? parentid { get; private set; } public list<item> subitems { get; set; } } private item buildatree() { var items = new list<item>() { new item(1, null), new item(2, 1), new item(3, 1), new item(4, 1), new item(5, 2), new item(6, 2), new item(7, 4), new item(8, 7), new item(9, 1), }; //build tree out of list items } the result expecting each item being in parent's subitems list
not using same item class, because ids redundant then
i'd use linq:
//build tree out of list items foreach (item item in items) { item.subitems = items.where(i => i.parentid.value == item.id).tolist(); } upd:
to simplify moving items 1 parent you'll need store reference parent item in every item. like:
public class item { public item(int id, int? parentid) { id = id; parentid = parentid; } public int id { get; private set; } public int? parentid { get; private set; } public list<item> subitems { get; set; } private item _parent; public item parent { { return _parent; } set { if (_parent != null) _parent.subitems.remove(this); _parent = value; if (_parent != null) _parent.subitems.add(this); } } } if implement in way setting new parent item via property enough modify both old , new parent's subitems collections - beware you'll need bit more complex list initialization mechanism.
Comments
Post a Comment