次の方法で共有


ツリー構造をつくるには

質問

2008年9月8日月曜日 2:03

C#を勉強中です。C#では基本的にはポインターがつかえません(safeモードでは)が、C#でツリー構造をつくるには

どうしたらいいのでしょうか?

以下は、勉強のためにXMLデータをツリー構造にするクラスxmlNodeをコーディングしてみたものですが、親、子などへの

リンクを、オブジェクト変数で表現しています。しかし、これでは、リンク先がない場合の表現ができません。

C++では、NULLをポインタにセットできますが。

C#でツリー構造を作成する方法をご教授いただけないでしょうか?

お世話になります。

 

using System;
using System.Collections.Generic;
using System.Text;

namespace xmlDomCS
{
    public class xmlNode
    {
        public string tagName;
        public string attrName;
        public string text;
        public string attrText;

        public xmlNode parent; //親への参照
        public xmlNode child;  //子への参照
        public xmlNode next;  //兄弟への参照

 

        public xmlNode()
        {
            tagName = "";
            attrName = "";
            text = "";
            attrText = "";

        }

        public xmlNode(string tName, string aName, string val, string val2)
        {
            tagName = tName;
            attrName = aName;
            text = val;
            attrText = val2;
        }

    }
}

すべての返信 (7)

2008年9月8日月曜日 2:18 ✅回答済み

基本的には、Nodeに子Nodeを追加していくだけです。
サンプルとしては、以下が理解しやすいと思います。

http://wawatete.ddo.jp/exec/program/cs/xml_xmltreeview


2008年9月8日月曜日 3:09 ✅回答済み

> C#を勉強中です。C#では基本的にはポインターがつかえません(safeモードでは)が、C#でツリー構造をつくるには> どうしたらいいのでしょうか?

classを使えばよいです。

C#のクラス型のオブジェクトを変数に代入することはできません。
できるのは,オブジェクトへの参照を変数に代入することです。
この,「オブジェクトへの参照」が,C/C++でいうところのポインタ (ただし配列反復子の機能無し) になります。

> 以下は、勉強のためにXMLデータをツリー構造にするクラスxmlNodeをコーディングしてみたものですが、親、子などへの
> リンクを、オブジェクト変数で表現しています。しかし、これでは、リンク先がない場合の表現ができません。

parent = null;
とかすればよいです。


2008年9月8日月曜日 4:48 ✅回答済み

>ただ、リスト構造、リスト構造とツリー構造の混在など、任意のリンク構造をC#で実現するという

>ことはできないという制限がありますでしょうか?

 

クラスを利用すれば、複雑なオブジェクトでも扱うことができます。

設計がきちんとしていれば問題はないと思いますよ。

 


2008年9月8日月曜日 6:41 ✅回答済み

こちらなどのデザインパターンも参考になると思います。

 

Object型をツリー構造で管理するTreeElementクラス
http://codezine.jp/article/detail/435?p=1

 


2008年9月8日月曜日 2:58

GX999さま

 

ありがとうございます。xmlについてはこれで十分ですね。

 

ただ、リスト構造、リスト構造とツリー構造の混在など、任意のリンク構造をC#で実現するという

ことはできないという制限がありますでしょうか?

 

お世話になります。

 

 


2008年9月8日月曜日 4:28

Yuo様

 

parent = null; でコンパイルが通りました。参照型でもほぼポインタと同様に扱えるのですね。

 

たいへん勉強になりました。ありがとうございました。

 

 


2008年9月19日金曜日 9:30

こんにちは。中川俊輔 です。

 

皆様、回答ありがとうございます。

 

masa-wangさん、フォーラムのご利用ありがとうございます。

有用な情報と思われる回答へ回答済みチェックをつけさせていただきました。

 

回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

masa-wangさんはチェックを解除することもできますので、ご確認ください。

 

それでは!