この記事では、Godotでの辞書型データの使い方についてまとめています。
辞書型の基本
辞書型(Dictionary)データは、キーと値のペアを格納するデータ構造です。
配列(リスト)に似ていますが、任意で設定できる「キー」によるデータアクセスができることから、参照に使う情報にも意味を持たせることが可能です。
宣言と初期化
辞書型は、{} を使用して、以下のように宣言・初期化ができます。
# 空の辞書を作成
var my_dict = {}
# キーと値を持つ辞書を作成
var my_dict = {
"name": "Player",
"health": 100,
"score": 50
}
※以降の説明は、上記「キーと値を持つ辞書を作成」の辞書 my_dict を宣言しているものとして実行例を示しています。
値のアクセス
辞書内の値には、<辞書>[<キー>] の形で指定を行い、アクセスします。
print(my_dict["name"]) # 出力: Player
print(my_dict["health"]) # 出力: 100
値の変更・追加
キーを指定することで、値を変更、または新しいキーを追加できます。
my_dict["health"] = 80 # 既存のキーの値を変更
my_dict["level"] = 1 # 新しいキーを追加
print(my_dict) # 出力: {"name": "Player", "health": 80, "score": 50, "level": 1}
値の削除
erase()メソッド を使用することで、キーとその値を削除できます。
my_dict.erase("score")
print(my_dict) # 出力: {"name": "Player", "health": 100}
キーの存在確認
has()またはinキーワードを使用して、指定したキーが存在するかを確認できます。
if my_dict.has("name"):
print("キー[name]が存在します")
if "name" in my_dict:
print("キー[name]が存在します")
キー/値のリストを取得
以下のメソッドを使用して、辞書内のキー/値をリストで取得できます。
・keys()メソッド:辞書内のキーをリストとして取得します。
・values()メソッド:辞書内の値をリストとして取得します。
var keys = my_dict.keys()
print(keys) # 出力: ["name", "health", "score"]
var values = my_dict.values()
print(values) # 出力: ["Player", 100, 50]
辞書のマージ
別の辞書を統合したい場合、merge() メソッドを使用します。
var new_data = {"mp": 50, "level": 90}
my_dict.merge(new_data)
print(my_dict)
# 出力結果: { "name": "Player", "health": 100, "score": 50, "mp": 50, "level": 90 }
サイズ取得
辞書内のキーと値のペアの数を取得するには、size()メソッドを使用します。
print(my_dict.size()) # 出力: 3
辞書型の応用
ここからは、辞書型の基本を踏まえた応用例についてまとめています。
ネストされた辞書
辞書型の値に、さらに辞書型を設定することもできます。
その場合、宣言とデータアクセス方法は以下のようになります。
var game_settings = {
"resolution": "1920x1080",
"fullscreen": true,
"volume": {
"music": 80,
"sfx": 70
}
}
# ネストされた辞書のアクセス
print(game_settings["volume"]["music"]) # 出力: 8
jsonファイルへの書き込み/読み込み
辞書型はjsonファイルとしての読み書きでも活用できます。
(以下は単純な例としてプロジェクトフォルダ直下にdata.json というファイルを出力しています)
▼辞書型をjsonファイルとして書き出す
var my_dict = {
"name": "Player",
"health": 100,
"score": 50
}
var file = FileAccess.open("data.json", FileAccess.WRITE)
var json = JSON.new()
var json_string = json.stringify(my_dict)
file.store_line(json_string)
▼jsonファイルを辞書型として読み込む
if FileAccess.file_exists("data.json"):
var file = FileAccess.open("data.json", FileAccess.READ)
var json = JSON.new()
var json_string = json.parse(file.get_line())
var data = json.data
if data != null:
print(data["name"]) # Player
print(data["health"]) # 100
print(data["score"]) # 50
コメント