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 내가 개체의 모든 데이터를 저장합니다, 나는 그것을 serialize하고 다른 클라이언트로 전송해야합니다. – eyalb

답변

0

, 나는 1 개 myChaper 클래스로 서브 챕터 및 chapper 클래스를 병합하고 그 안에 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을 발표 사용할 수 있습니다.

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; 
    } 
} 

클래스, 행, 장, 책 노드 클래스, 예를 들어,에서 파생 할 수 있습니다 다음, 당신은이

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 class Book : Node 
{ 
    public override void SetParent(INode node) 
    { 
     throw new InvalidOperationException(); 
    } 

    public string Title { get; set; } 
}