none
グラフデータの持ち方について RRS feed

  • 質問

  • お世話になります。

    データの持ち方の相談です。
    グラフデータの持ち方なのですが、以下のようなデータをどのように持つと
    プログラムで扱いやすくなるでしょうか?


    大項目1                     ・・・  大項目2
    中項目1       中項目2       ・・・  中項目1           
    データa データb  データa データb    データa データb
       0    10     0     10              1        30
       1    20     2       40              2        50
          ・     ・         ・      ・          ・      ・
          ・     ・         ・      ・          ・      ・
          ・     ・         ・      ・          ・      ・

    以下のようにデータを扱えるとうれしいです。

    ・大項目、中項目を指定すると、グラフのデータ配列a・bが取得できる。
    ・データaを指定するとデータbが取得できる。
     (データaは時間なのですが、時間を指定すると、その時間のデータbを取得したい。)


    よろしくお願いいたします

    2012年7月9日 9:36

回答

    • 最小のデータ ユニットは「データa」「データb」である。
    • 不定数の中項目がある。
    • 不定数の大項目がある。

    でいいですか?

    直打一例

    public class DataUnit
    {
        public DateTime データa;
        public decimal データb;
    }
    
    public class 項目
    {
        public string 名称;
        public System.Collections.DataModel.Collections<DataUnit> データ;
        public System.Collections.DataModel.Collections<項目> 下位項目;
    }

    Jitta@わんくま同盟

    • 回答としてマーク 山本春海 2012年8月2日 8:44
    2012年7月9日 14:27
  • エネコンさん、こんにちは、Fuda1ロボットです。

    >データaを指定するとデータbが取得できる。
    この辺は少し、何かメソッドを作る必要が有りますが、基本的な所を考えて見ました。

    using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     
    namespace DataTest01
     {
         class Program
         {
             ///////////////////////
             //  クラスを定義する //
             ///////////////////////
     
            public class Cデータ
             {
                 public DateTime a;
                 public double b;
             }
     
            public class C中項目
             {
                 public string 名称;
                 public List<Cデータ>データ;
     
                public C中項目()
                 {
                     データ = new List<Cデータ>();
                 }
             }
     
            public class C大項目
             {
                 public string 名称;
                 public List<C中項目>中項目;
     
                public C大項目()
                 {
                     中項目 =new List<C中項目>();
                 }
             }
     
            public class Cグラフデータ
             {
                 public string 名称;
                 public List<C大項目>大項目;
     
                public Cグラフデータ()
                 {
                     大項目 = new List<C大項目>();
                 }
             }
     
            static void Main(string[] args)
             {
                 /////////////////////////////
                 //  データを格納する処理  //
                 /////////////////////////////
      
                 // データ01
                 Cデータ データ01 = new Cデータ();
                 データ01.a = DateTime.Now;  // 現在時刻
                 データ01.b = 30.0;          // 気温30度    
    
                // データ02
                 Cデータ データ02 = new Cデータ();
                 データ02.a = DateTime.Now;  // 現在時刻
                 データ02.b = 25.0;          // 気温30度    
    
                // データ03
                 Cデータ データ03 = new Cデータ();
                 データ03.a = DateTime.Now;  // 現在時刻
                 データ03.b = 33.0;          // 気温30度    
                
                // 中項目01
                 C中項目 中項目01 = new C中項目();
                 中項目01.名称 = "東京";
                 中項目01.データ.Add(データ01);
                 中項目01.データ.Add(データ02);
                 中項目01.データ.Add(データ03);
     
                // 中項目02
                 C中項目 中項目02 = new C中項目();
                 中項目02.名称 = "静岡";
                 中項目02.データ.Add(データ01);
                 中項目02.データ.Add(データ02);
                 中項目02.データ.Add(データ03);
                 
                // 大項目01
                 C大項目 大項目01 = new C大項目();
                 大項目01.名称 = "日本";
                 大項目01.中項目.Add(中項目01);
                 大項目01.中項目.Add(中項目02);
     
                // グラフデータ
                 Cグラフデータ グラフデータ = new Cグラフデータ();
                 グラフデータ.名称="全国の気温";
                 グラフデータ.大項目.Add(大項目01);
     
                /////////////////////////////
                 //  データを表示する処理  //
                 /////////////////////////////
     
                // 東京の気温
                 Console.WriteLine(グラフデータ.大項目[0].中項目[0].データ[0].a);
                 Console.WriteLine(グラフデータ.大項目[0].中項目[0].データ[0].b);
                 Console.WriteLine(グラフデータ.大項目[0].中項目[0].データ[1].a);
                 Console.WriteLine(グラフデータ.大項目[0].中項目[0].データ[1].b);
     
                // 静岡の気温
                 Console.WriteLine(グラフデータ.大項目[0].中項目[1].データ[2].a);
                 Console.WriteLine(グラフデータ.大項目[0].中項目[1].データ[2].b);
             }
         }
     }
    
    

    2012年7月11日 2:05

すべての返信

    • 最小のデータ ユニットは「データa」「データb」である。
    • 不定数の中項目がある。
    • 不定数の大項目がある。

    でいいですか?

    直打一例

    public class DataUnit
    {
        public DateTime データa;
        public decimal データb;
    }
    
    public class 項目
    {
        public string 名称;
        public System.Collections.DataModel.Collections<DataUnit> データ;
        public System.Collections.DataModel.Collections<項目> 下位項目;
    }

    Jitta@わんくま同盟

    • 回答としてマーク 山本春海 2012年8月2日 8:44
    2012年7月9日 14:27
  • エネコンさん、こんにちは、Fuda1ロボットです。

    >データaを指定するとデータbが取得できる。
    この辺は少し、何かメソッドを作る必要が有りますが、基本的な所を考えて見ました。

    using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     
    namespace DataTest01
     {
         class Program
         {
             ///////////////////////
             //  クラスを定義する //
             ///////////////////////
     
            public class Cデータ
             {
                 public DateTime a;
                 public double b;
             }
     
            public class C中項目
             {
                 public string 名称;
                 public List<Cデータ>データ;
     
                public C中項目()
                 {
                     データ = new List<Cデータ>();
                 }
             }
     
            public class C大項目
             {
                 public string 名称;
                 public List<C中項目>中項目;
     
                public C大項目()
                 {
                     中項目 =new List<C中項目>();
                 }
             }
     
            public class Cグラフデータ
             {
                 public string 名称;
                 public List<C大項目>大項目;
     
                public Cグラフデータ()
                 {
                     大項目 = new List<C大項目>();
                 }
             }
     
            static void Main(string[] args)
             {
                 /////////////////////////////
                 //  データを格納する処理  //
                 /////////////////////////////
      
                 // データ01
                 Cデータ データ01 = new Cデータ();
                 データ01.a = DateTime.Now;  // 現在時刻
                 データ01.b = 30.0;          // 気温30度    
    
                // データ02
                 Cデータ データ02 = new Cデータ();
                 データ02.a = DateTime.Now;  // 現在時刻
                 データ02.b = 25.0;          // 気温30度    
    
                // データ03
                 Cデータ データ03 = new Cデータ();
                 データ03.a = DateTime.Now;  // 現在時刻
                 データ03.b = 33.0;          // 気温30度    
                
                // 中項目01
                 C中項目 中項目01 = new C中項目();
                 中項目01.名称 = "東京";
                 中項目01.データ.Add(データ01);
                 中項目01.データ.Add(データ02);
                 中項目01.データ.Add(データ03);
     
                // 中項目02
                 C中項目 中項目02 = new C中項目();
                 中項目02.名称 = "静岡";
                 中項目02.データ.Add(データ01);
                 中項目02.データ.Add(データ02);
                 中項目02.データ.Add(データ03);
                 
                // 大項目01
                 C大項目 大項目01 = new C大項目();
                 大項目01.名称 = "日本";
                 大項目01.中項目.Add(中項目01);
                 大項目01.中項目.Add(中項目02);
     
                // グラフデータ
                 Cグラフデータ グラフデータ = new Cグラフデータ();
                 グラフデータ.名称="全国の気温";
                 グラフデータ.大項目.Add(大項目01);
     
                /////////////////////////////
                 //  データを表示する処理  //
                 /////////////////////////////
     
                // 東京の気温
                 Console.WriteLine(グラフデータ.大項目[0].中項目[0].データ[0].a);
                 Console.WriteLine(グラフデータ.大項目[0].中項目[0].データ[0].b);
                 Console.WriteLine(グラフデータ.大項目[0].中項目[0].データ[1].a);
                 Console.WriteLine(グラフデータ.大項目[0].中項目[0].データ[1].b);
     
                // 静岡の気温
                 Console.WriteLine(グラフデータ.大項目[0].中項目[1].データ[2].a);
                 Console.WriteLine(グラフデータ.大項目[0].中項目[1].データ[2].b);
             }
         }
     }
    
    

    2012年7月11日 2:05
  • 回答ありがとうございます。

    お二方の回答参考になりました。

    あと、グラフデータをXML形式で保存したいのですが、

    FUDA1さんのコードのように、クラス内にクラスのリストを持つデータでも

    可能でしょうか?

    2012年7月13日 11:09
  • エネコンさん、こんばんは! Fuda1です。

    XML形式ですか、入門編ですので、難しく考えないで、テキスト文書で、データに名前を付けたものとしました。

    整形式XML文書(DTDなし)
    <?xml version="1.0" encoding="Shift-JIS" ?>
    <グラフデータ>
    <データ01>
    <時間>00:00:00</時間>
    <気温>30.0</気温>
    </データ01>
    <データ02>
    <時間>00:00:10</時間>
    <気温>25.0</気温>
    </データ02>
    <データ03>
    <時間>00:00:20</時間>
    <気温>33.0</気温>
    </データ03>
    <中項目01>
    <名称>東京</名称>
    <ADD01>データ01</ADD01>
    <ADD02>データ02</ADD02>
    <ADD03>データ03</ADD03>
    </中項目01>
    <中項目02>
    <名称>静岡</名称>
    <ADD01>データ01</ADD01>
    <ADD02>データ02</ADD02>
    <ADD03>データ03</ADD03>
    </中項目02>
    <大項目>
    <名称>全国の気温</名称>
    <ADD01>大項目01</ADD01>
    </大項目>
    </グラフデータ>

    こんな感じで、作っていけると思いますが、如何でしょうか?

    2012年7月13日 12:11