Movatterモバイル変換


[0]ホーム

URL:


UnityC# 辞書(ディクショナリー)の使い方 キーと値でデータを指定する

辞書クラスとはの画像Unity C#入門講座
辞書クラスは要素をキーと値のペアにした便利なコレクション。


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

今回の記事では辞書型(ディクショナリー、Dictionary)について解説します。

辞書型も前回扱ったListクラスと同じくコレクションの一種になります。

前回の記事:

UnityC# Listの使い方
前回はインターフェースとポリモーフィズムについて学びましたが、今回の記事ではListについて解説していきます。前回の記事:Listは配列をより使いやすくしたコレクションの一つになります。配列より便利なListクラスとはListクラスは配列と...
feynman.co.jp
2021.09.11

【Line登録者限定のプレゼントもあるよ!】

簡単にデータにアクセスできる辞書型(ディクショナリー)って何?

辞書クラスについての画像

辞書クラスではキーを使って要素を追加したり、削除したり、アクセスしたりする。

辞書型はキーとなる値それに対応する値ペアからなるコレクションになります。キーおよび値の型はテンプレートで別の型を指定できます。

要素にアクセスする時は配列やリストの場合は添字を使っていましたが、辞書型の場合はキーを使用します。そのため辞書型はリストより指定した値にアクセスしやすいコレクションになります。

その代わり、辞書型のデータの並びはこちらから制御できませんループ処理の際には要素の順番に依存しない処理を書く必要があります。

主なメンバは次のものになります。

  • 追加:Add(key, value)
  • 削除:Remove(key)
  • キーチェック:Contains(key)
  • 全てのキー:Keysプロパティ
  • 全ての値:Valuesプロパティ
辞書型の使い方
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Dictionary<string,int>dict=newDictionary<string,int>();
 
//要素を追加する時はキーと値を一緒に渡す。
dict.Add("Unity",100);
dict.Add("Game",200);
dict["Key"]=300;//<- 添字のように使うこともできる。
 
//要素数とキーの確認
varc=dict.Count;// <- c == 3
varb=dict.Contains("Key");// <- b == true
 
//要素の値にアクセスする時はキーを添字がわりに使う。
varn=dict["Key"];// <- n == 300
dict["Key"]=-1;// <- 値を上書きしている。
 
//要素の削除にはキーを使う。
dict.Remove("Key");
b=dict.Contains("Key");// <- b == false
 
//辞書型の要素のループにはforeachを使う
foreach(KeyValuePair<string,int>pairindict){
  varkey=pair.Key;// <- キー
  varvalue=pair.Value;// <- ペアとなる値
}
//キーだけをループしたい時はKeysを使う。
foreach(varkeyindict.Keys){...}
//値だけをループしたい時はValuesを使う。
foreach(varvalueindict.Values){...}

KeyValuePair<TKey, TValue>型について

辞書型はキーと値をKeyValuePair<TKey, TValue>型で管理しています。

KeyValuePair<TKey, TValue>型も辞書型と同じくテンプレートを使用しています。なのでテンプレートに型を指定する必要がありますが、こちらの場合は辞書型に渡したテンプレートの型を内部で設定してくれるのであまり気にする必要はありません。

KeyValuePair<TKey, TValue>型自体はとても簡単な内容になり、次のプロパティが定義されています。

  • Key:キーを表すプロパティ。
  • Value:値を表すプロパティ。

辞書型が継承しているインターフェース

辞書型は次のインターフェースを継承しています。

  • ICollection
  • ICollection<KeyValuePair<TKey,TValue>>
  • IReadOnlyCollection<KeyValuePair<TKey,TValue>>
  • IDictionary
  • IDictionary<TKey,TValue>
  • IReadOnlyDictionary<TKey,TValue>
  • IEnumerable<KeyValuePair<TKey,TValue>>
  • IEnumerable
  • ISerializable
  • IDeserializationCallback

辞書型で実装できることを知りたい場合は上記のインターフェースについて調べてみましょう。

【実践】Unityで辞書(ディクショナリー)を使ってみよう!

それでは辞書型をUnityで使用してみましょう!

残念ながら辞書型はUnityエディターが対応していないためInspectorから設定できません

エディター拡張を使用するとInspectorから設定できるようになりますが、こちらからそれを実装するか、Web上で公開されているものを使うなど、Unity以外の別のスクリプトが必要になります。

今回の記事では辞書型の使い方の簡単な一例としてサンプルコードをみてください。

サンプルコードを実行する際には次のメンバをInspectorから設定してください。

  • Keysフィールド:辞書(_dictフィールド)に設定するキーの一覧。好きな数追加してください。
  • Textフィールド:画面に表示するために使うTextMeshコンポーネントをアタッチしてください。
Unityで辞書型を使ってみよう!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
usingSystem.Collections;
usingSystem.Collections.Generic;
usingUnityEngine;
 
publicclassSample:MonoBehaviour{
  Dictionary<string,int>_dict;
 
  publicList<string>Keys;
  publicstringShowKey;
  publicTextMeshText;
 
  voidStart(){
    //辞書の初期化。InspectorでKeysに設定したキーを追加している。
    _dict=newDictionary<string,int>();
    for(vari=0;i<Keys.Count;++i){
      _dict.Add(Keys[i],(i+1)*100);
    }
  }
 
  voidUpdate(){
    if(Text==null)return;//Textが設定されていなかったら何もしない。
 
    //ShowKeyに設定されたキーが辞書にある場合はそのペアを、ない場合は何もないテキストを表示する。
    if(_dict.ContainsKey(ShowKey)){
      Text.text=$"{ShowKey} => {_dict[ShowKey]}";
    }else{
      Text.text="(none key...)";
    }
  }
}
サンプル実行 キーがある時の画像

ShowKeyに辞書にあるキーを入力したら、画面にそのキーとペアになっている値が表示される。

サンプルコードでは辞書型はプライベートなメンバフィールド(_dict)として定義しています。

Startメソッドの中で辞書型をKeysフィールドに設定されたキー値を使って初期化しています。

初期化後の辞書型の内容を確認するために、ShowKeyフィールドに設定されたキーが辞書にあるのかをUpdateメソッド内でDictionary<TKey, TValue>.Containsメソッドを使用して確認しています。

あった場合はそのキーと値をテキストに変換して画面に表示しています。ない場合はキーがないことを意味するテキストを表示しています。

サンプル実行 キーがない時の画像

ShowKeyに辞書にないキーを入力すると、何もない的なテキストが画面に表示される。

まとめ

今回の記事では辞書型について解説してきました。

簡単にまとめると以下のようになります。

  • 辞書型はキーとそれに対応する値のペアからなるコレクション。
  • キーと値のペアはKeyValuePair<TKey, TValue>型として扱われている。
  • 要素を追加する時はキーとそのペアとなる値指定する。
  • 削除する時はキーのみでOK。
  • 値にアクセスする時はそれに対応するキーを添字代わりに使用する。
  • ループする時はforeach文を使う。
  • キーのみの一覧を見る時はKeysを、値のみの一覧を見る時はValuesを使用する。
  • 既にキーがある場合に追加しようとすると値が上書きされる。

それでは次の記事に行ってみましょう!

UnityC# デリゲートとイベントとUnityActionの使い方
今回の記事ではデリゲートとイベントについて解説していきます。前回は辞書の使い方について解説しましたね。デリゲートとイベントを使うことでメソッドを値として使用することができます。メソッドを値にして利点があるのかと思われますが、アプリでできるこ...
feynman.co.jp
2023.04.22

 

初心者向けUnityC#入門講座に戻る>>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

関連記事

Unity C#入門講座

UnityC#の例外処理の使い方 throw, try, catch, finally文について

今回の記事では例外処理について解説していきます。例外処理はアプリ実行時に予想していない自体が発生した時に使用するC#の機能になります。例外処理をマスターしてばっちりエラーハンドリングしていきましょう。前回の記事:例外処理とは例外処理とはアプ...
2023.04.23
Unity C#入門講座
Unity C#入門講座

Unity C#の演算子の使い方をマスターしよう

今回の記事では演算子について解説していきます。演算子は簡単に言うと、足し算、掛け算、引き算、割り算などを意味する記号ですね。プログラミングする上ではこうした四則演算以外でも演算子を利用することがあります。以前の記事の中でも既にいくつか使用さ...
2023.03.06
Unity C#入門講座
Unity C#入門講座

Unity C#言語とは

本連載では、Unity上においてのC#について解説していきます。初めての方でもわかりやすく解説していきますので、お気軽に読んだり、実際にUnity上で動かしてみてください。Unityにおけるプログラミング言語の役割プログラミング言語を使用す...
2023.02.02
Unity C#入門講座
Unity C#入門講座

Unity C#での列挙型と定数の使い方

今回の記事では列挙型と定数について解説していきます。列挙型を使うとスクリプト上で定数をテキストとして表現でき、より読みやすく設定しやすいコードを書くことができます。前回の記事:列挙型(enum)とは列挙型は値型になり、System.Enum...
2021.09.11
Unity C#入門講座
Unity C#入門講座

Unity C#のコンパイルエラーの種類と対処法について

前回ははじめてのUnity C#プログラミングに挑戦しましたね。前回の記事↓プログラミングではコンパイルエラーが付き物です。コンパイルエラーはスクリプトの書き方が間違っていることを私たちに教えてくれる機能となります。コンパイルエラーが発生し...
2021.04.11
Unity C#入門講座
Unity C#入門講座

UnityC#のフィールド・プロパティ・アクセス修飾子の使い方 スコープの概念を理解する

今回の記事ではクラスのメンバであるフィールドとプロパティをまず解説し、次にアクセス修飾子とスコープについての理解を深めていきます。ややこしいところですが、頑張っていきましょう!前回の記事:クラスにフィールドとプロパティを持たせてみようそれで...
2021.09.11
Unity C#入門講座

コメント

コメントをどうぞコメントをキャンセル

メールアドレスが公開されることはありません。

CAPTCHA


↓知りたいことを検索してね

Unity入門の森 インディーゲームリリース!

魔女と召喚獣

 

Seeker of Darkness

 

呪術迷宮をリリース

unity入門の森 ゲームの作り方のyoutubeチャンネル

unity入門の森 ゲームの作り方
「unity入門の森 ゲームの作り方」のyoutubeチャンネル。unityを用いたゲームプログラミング、unityスクール、ゲームクリエイターになりたい方向けの情報を中心に発信。インディーゲームクリエイター・プロゲーマー・ゲーム実況者を目...
www.youtube.com

ブログランキング参加中(クリックして応援してくれると嬉しいな)

にほんブログ村 教育ブログ プログラミング教育へ
にほんブログ村

カテゴリー

最近の投稿

タイトルとURLをコピーしました

[8]ページ先頭

©2009-2025 Movatter.jp