2009-09-02 4 views
2

Какая лучшая библиотека .NET (коммерческая или с открытым исходным кодом), которая реализует небиновое дерево и связанные с ним операции? Требования - динамически вставлять и удалять узлы, копировать/вставлять узлы, находить информацию, похожую на узлы, копировать/вставлять папки и их детей из одной области дерева в другую. Дерево находится на уровне бизнес-логики. Уровень представления - WPF. Язык реализации - C#.Лучшая библиотека .NET для деревьев

+0

А что вы подразумеваете под 'лучший'? Самое быстрое время поиска? Самый маленький след памяти? Легко запросить? – Pondidum

+0

Быстрое исполнение и с кривой обучения, солидный по качеству. –

+0

Еще одна вещь: дерево будет заселено из XML или SQLSERVER –

ответ

2

Деревья настолько просты в написании и особые требования относительно разные, что я не уверен, что «древовидная библиотека» будет очень полезна. Почему бы вам не написать свой собственный?

3

Возможно, вы захотите посмотреть QuickGraph на codeplex.

4

Я бы сказал, LINQ to XML, без сомнения.

XDocument doc = new XDocument(
    new XDeclaration("1.0", "utf-8", "true"), 
    new XComment("Comment"), 
    new XElement("Employees", 
     new XElement("RootElement", 
      new XElement("Employee", 
       new XAttribute("id", "123"), 
       new XElement("name", "John"), 
       new XCData("CData"))))); 

// Selection multiple nodes 
var allEmployees = xdoc.Root.Elements("Employees"); 
// Select single node 
var employeeJohn = from node in xdoc.Root.Descendants().Elements("Employees").Elements("Employee") 
        where node.Attribute("id").Value == "123" 
        select node; 

// Insert node 
XElement newNode = new XElement("NewNode", "Node content"); 
allEmployees.Add(newNode); 

// Delete node 
employeeJohn.Remove(); 
+0

Возможно, вы должны добавить пример того, как вы динамически вставляете и удаляете узлы на каком-либо существующем дереве. –

4

Я хотел бы использовать:

class MyTreeNode : List<MyTreeNode> 
{ 
    // declare per-node properties here, e.g. 
    public string Name { get; set; } 
} 

Строительство и перестраивая дерево довольно просто:

MyTreeNode root = new MyTreeNode {Name = "root"}; 

MyTreeNode firstChild = new MyTreeNode {Name = "1"}; 
root.Add(firstChild); 

MyTreeNode secondChild = new MyTreeNode { Name = "2" }; 
root.Add(secondChild); 

root.Remove(firstChild); 
secondChild.Add(firstChild); 
Смежные вопросы