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

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -