2013-12-22 2 views
1

У меня есть объект myBook.Реализация древовидной структуры на C#

Могу ли я реализовать лучшую структуру для данных такого типа?

public class myRow{ 

    public int ID = 0; 
    public int number = 0; 
    public String param1 = null; 
    public decimal param2 = null; 
    public string parm3 = ""; 
    public int param4 = null; 

} 

public class mySubChapter{ 

    public int ID = 0; 
    public string title = ""; 
    public List<myRow> rows; 

    internal bool sort(){...} //sort rows by ID 
} 

public class myChapter{ 

    public int ID = 0; 
    public string title = ""; 
    public List<mySubChapter> subChapters; 

    internal bool sort(){...} //sort subChapters by ID 
} 

public class myBook{ 
    public int ID = 0; 
    public string title = "" 
    public List<myChapter> chapters; 

    internal bool sort(){...} //sort chapters by ID 
} 
+0

С этой целью структура данных? Вы хотите сохранить в ней весь текст книги или просто информацию, как в каталоге библиотеки? – PMF

+0

@PMF Я сохраню все данные в объекте, мне нужно будет сериализовать его и передать его другому клиенту. – eyalb

ответ

0

На мой взгляд, я сливаться ПОДГЛАВА и chapper класса в один класс myChaper и добавить новое свойство chapterLevel в нем. Потому что я думаю, что subChapter - это глава с разным уровнем (дети главы могут быть). Извините за мой английский.

public class myRow{ 

    public int ID = 0; 
    public int number = 0; 
    public String param1 = null; 
    public decimal param2 = null; 
    public string parm3 = ""; 
    public int param4 = null; 

} 

public class myChapter{ 

    public int ID = 0; 
    public string title = ""; 
    public int chapterLevel = 0; 

    internal bool sort(){...} //sort chapters by ID and level 
} 

public class myBook{ 
    public int ID = 0; 
    public string title = "" 
    public List<myChapter> chapters; 

    internal bool sort(){...} //sort chapters by ID 
} 
2

Если вы действительно хотите, чтобы смоделировать структуру книги в виде дерева, вы можете использовать общую реализацию дерева, как один представлены here. Затем, вы можете сформировать дерево с помощью кода, как этот

DTreeNode<string> root = new DTreeNode<string>(); 
DTreeNode<string> temp; 

temp = root.Nodes.Add("Hello"); 
temp.Nodes.Add("olleH"); 

temp = root.Nodes.Add("World"); 
temp.Nodes.AddRange(new string[] 
     { "dWorl", "ldWor", "rldWo", "orldW" }); 
0

другой реализации дерева:

public interface INode 
{ 
    int Id { get; set; } 

    INode Parent { get; } 

    ReadOnlyCollection<INode> Children { get; } 

    void SetParent(INode node); 

    void AddChild(INode node); 
} 

public class Node : INode 
{ 
    private INode _parent; 

    private IList<INode> _children; 

    public Node() 
    { 
     _children = new List<INode>();  
    } 

    public int Id { get; set; } 

    public INode Parent 
    { 
     get { return _parent; } 
    } 

    public ReadOnlyCollection<INode> Children 
    { 
     get 
     { 
      return new ReadOnlyCollection<INode> 
         (_children.OrderBy(c => c.Id).ToList()); 
     } 
    } 

    public virtual void AddNode(INode node) 
    { 
     _children.Add(node); 

     node.SetParent(this); 
    } 

    public virtual void SetParent(INode node) 
    { 
     _parent = node; 
    } 
} 

Классы, Row, Глава, Книга может наследоваться от класса Node, например,

public class Book : Node 
{ 
    public override void SetParent(INode node) 
    { 
     throw new InvalidOperationException(); 
    } 

    public string Title { get; set; } 
} 
Смежные вопросы