キー/ペアでデータを管理できるDictionaryクラスのサンプルコード

「キー」と「値」の組み合わせでテータを管理できるコレクション型クラスです。

概要

配列やVectorでは「何番目の要素か?」を指定して要素を取得しますが、Dictionaryクラスは要素に「キー」と呼ばれる文字列を設定できる点が大きな違いです。

銘柄ごとの設定情報を保管するなど、文字列の「キー」で要素を管理したい場合に便利です。

よく使うプロパティ/メソッド

要素の追加

命令 目的 戻り値の型
Add( strKey, objVal ) 指定キーにobj要素を追加 (無し)

要素の削除

命令 目的 戻り値の型
Remove( strKey ) 「指定キーの」要素を削除 bool
Clear() 「すべての」要素を削除 (無し)

要素の取得

命令 目的 戻り値の型
Items[strKey] 「指定キーの」要素を取得 Object
Count コレクション内の要素数をカウント int

キー/値の一括取得

命令 目的 戻り値の型
Keys コレクション内にある全てのキーを取得(キー順でソート済み) Vector
Values コレクション内にある全ての値を取得(キー順でソート済み) Vector

判定

命令 目的 戻り値の型
Contains( strKey ) 指定キーの要素がコレクション内に含まれているかどうかチェック bool

EasyLanguageサンプルコード

インジケーターを新規作成して以下のコードを貼り付け、チャートに設定ください。結果が印刷ログに表示されます。

using elsystem;
using elsystem.collections;

Vars:
    Dictionary dicData( NULL ),
    string strOutput( "" ),
    Vector vecKeys( NULL ),
    Vector vecValues( NULL );

Once ( LastBarOnChartEx ) Begin
    
    ClearPrintLog;

    //----------------------------------------
    // 0. インスタンスの新規作成
    //----------------------------------------

    dicData = Dictionary.Create();

    //----------------------------------------
    // 1. 要素の追加(1)
    //----------------------------------------
    
    dicData.Add( "7203", 10 );
    dicData.Add( "9984", 20 );
    dicData.Add( "9437", 30 );
    dicData.Add( "8306", 40 );
    dicData.Add( "9432", 50 );
    
    strOutput = ELString.Format(
        "--[1. 要素の追加(1)]-------------------------------" + NewLine +
        "【要素数】{0}" + NewLine +
        "【キー「9984」の値】{1}" + NewLine +
        "【キー「8306」の値】{2}",
        dicData.Count,
        dicData.Items["9984"] astype int,
        dicData.Items["8306"] astype int
    );
    
    print( strOutput + NewLine );
    
    //----------------------------------------
    // 2. 要素の追加と変更
    //----------------------------------------
    
    dicData.Add( "6758", 110 );
    dicData.Add( "6861", 120 );
    dicData.Add( "8686", 130 );
    dicData["9984"] = 999;

    strOutput = ELString.Format(
        "--[2. 要素の追加(2)]-------------------------------" + NewLine +
        "【要素数】{0}" + NewLine +
        "【キー「6861」の値】{1}" + NewLine +
        "【キー「9984」の値】{2}",
        dicData.Count,
        dicData.Items["6861"] astype int,
        dicData.Items["9984"] astype int
    );
    
    print( strOutput + NewLine );
    
    //----------------------------------------
    // 3. 要素の削除
    //----------------------------------------
    
    dicData.Remove( "8306" );
    dicData.Remove( "6758" );
    
    strOutput = ELString.Format(
        "--[3. 要素の削除]-------------------------------" + NewLine +
        "【要素数】{0}",
        dicData.Count
    );
    print( strOutput + NewLine );
    
    //----------------------------------------
    // 4. キーの存在チェック
    //----------------------------------------
    
    strOutput = ELString.Format(
        "--[4. キーの存在チェック]-------------------------------" + NewLine +
        "【キー「6861」が存在するか?】{0}" + NewLine +
        "【キー「1111」が存在するか?】{1}",
        dicData.Contains( "6861" ),
        dicData.Contains( "1111" )
    );
    print( strOutput + NewLine );
    
    //----------------------------------------
    // 5. キーの一括取得
    //----------------------------------------
    
    strOutput = "--[5. キーの一括取得]-------------------------------" + NewLine;
    
    vecKeys = dicData.Keys;
    For Value1 = 0 to vecKeys.Count - 1 Begin
        strOutput += ELString.Format(
            "{0}, ",
            vecKeys.Items[Value1] astype string
        );
    End;
    
    print( strOutput + NewLine );
    
    //----------------------------------------
    // 6. 値の一括取得
    //----------------------------------------
    
    strOutput = "--[6. 値の一括取得]-------------------------------" + NewLine;
    
    vecValues = dicData.Values;
    For Value1 = 0 to vecValues.Count - 1 Begin
        strOutput += ELString.Format(
            "{0}, ",
            vecValues.Items[Value1] astype int
        );
    End;
    
    print( strOutput + NewLine );
    
    //----------------------------------------
    // 7. 全て削除
    //----------------------------------------
    
    dicData.Clear();
    
    strOutput = ELString.Format(
        "--[7. 全て削除]-------------------------------" + NewLine +
        "【要素数】{0}",
        dicData.Count
    );
    
    print( strOutput + NewLine );
    
End;

{ ** Copyright © Trade Tech All Rights Reserved ** }

表示例

本クラスの使いどころ

Dictionaryは特に複雑なプログラムを作成する上で欠かせないクラスです。

配列やVectorは「●番目の要素を取得する」用途には向いていますが、Dictionaryは「指定したキーの要素を取得する」用途に向いており、やりたい事によってどちらが向いているかは異なります。

Vectorでやっていた事をDictionaryでやると劇的に使いやすくなったり処理スピードもアップしたり。また逆の場合もあったりします。

ぜひ両者を色々試してみて最適な使いどころを探ってみてください。

クラス一覧ページに戻る

「株式投資 x IT」の
オンラインコミュニティに参加しませんか?

2019年5月頃から、トレステやEasyLanguageを中心とした株式投資に役立つ最新ツールやITスキルに関する情報が手に入るオンラインコミュニティを運営しています。

トレステやEasyLanguageの豊富な小ネタやサンプルコードが手に入り
チャットツール(Slack)でいつでもトレステやEasyLanguageの質問ができ
毎月開催している勉強会の収録動画がすべて視聴できて
トレステ以外にも株式投資に役立つ最新のツールやITスキルを学べる

オンライン動画講座
時系列分析用サンプルプログラム
OOELサンプルプログラム
Slackでいつでも質問可能

このように、「コンテンツ見放題」「チャット交流」という構成で、僕がが運営しているコミュニティになります。

最近トレステやEasyLanguageを始めたという方から、経験豊富な投資家・プログラマーの方まで、様々な人が集う場となっております。興味のある方はぜひ、ご参加ください。

トレードテック・オンラインの詳細を見る