【17】連想配列

連想配列は、番号付きインデックスの代わりに、値を識別するためにキーを使用する配列で、値はそのキーに関連するデータを格納します。配列のように順番に並べるのではなく、値にラベルを付ける必要がある場合に連想配列を使用します。

連想配列の記述方法

配列と同様に、連想配列も中括弧{ }を使用します。キーと値のペアは、カンマの後に別の行に格納されます。キーと値には、文字列、数値、変数名など、あらゆるデータ型を使用することができます。この例では、キーとして文字列を使用しています。

local inventory = {
    ["Gold Bars"] = 4,
    ["Healing Potions"] = 1,
    ["Cups of Coffee"] = 3000
}

キーの書式

キーが文字列ではなく、スペースのない有効な名前の場合、括弧は必要ありません。以下の例は、プレイヤーがクエストに必要なオーブを集めたかどうかを追跡するためにブーリアン値を使用しています。

-- ポータルをアクティブ化するために必要なオーブ
local questOrbs = {
    fireOrb = true,
    waterOrb = false,
    windOrb = true
}

キャラクターの連想配列

連想配列は、キャラクターの情報を整理するためによく使われます。キーは、名前やヘルスポイントなどのプロパティにラベルを付けるために使用されます。この例ではそれを行うために連想配列を使用しています。

  1. ServerScriptService の中に、新しいスクリプトを作成します。
  2. local hero = { と入力し、[Enter]を押して連想配列をオートコンプリートさせます。
local hero = {

}
  1. キャラの名前を示すものとして、name という名称をキーにします。
local hero = {
name
}
  1. name の値を Jin に設定します。行の最後に カンマ を入れて終了させます。
local hero = {
    name = "Jin",
}
  1. 2つ目のキーとして、体力を表す health を設定し、値を1000にします。数値として扱うためにダブルクォーテーションは付けません。
local hero = {
    name = "Jin",
    health  = 1000,
}

連想配列の値の使用方法

コード内で個々の連想配列の値を使用するには、配列名の後に括弧を付け、その中でキーを指定します。
例: dictionaryName[key]

  • print 文で hero の名前を表示させます。テストプレイしてみてください。
local hero = {
    name = "Jin",
    health = 1000,
}
print ( "The hero's name is "  .. hero["name"] )

ユニークなキーを使用する

下記のように同じキーを使用してもエラーにはなりませんが最後に指定したものが有効となります。以下の例では、最後に指定されている Rana が表示されます。

local hero = {
    name = "Jin",
    health = 1000,
    name = "Rana"
}
print ( "The hero's name is "  .. hero["name"] )

連想配列の追加と削除

既存の連想配列にキーと値のペアを追加する必要が出てくると思います。例えば、ゲームに参加したときにプレイヤーを辞書に追加して、0ポイントからスタートさせます。

キー値ペアの追加

  1. 連想配列の名前を入力し、その後にキーの名前を括弧内で指定します。
    例:playerPoints[“name”]
  2. 同じ行で、値を設定します。
    例:playerPoints[“name”] = 0

キー値ペアの削除

  • 値を nil に設定します。これにより、キーが削除されます。
    例:playerPoints[“name”] = nil

連想配列のキーとしての変数

キーは変数を使用することもできます。この例では、変数を使用して、プレイヤーがゲームに参加したときにプレイヤーの名前をキーとして追加し、そのプレイヤーのポイント値を0に設定しています。

  1. ServerScriptService で、PlayerPoints という名前の新しいスクリプトを作成します。
  2. Players サービスを使って、プレイヤーの情報を取得します。さらに空の連想配列を作成します。
-- Playersを取得
Players = game:GetService("Players")
 
-- 空の配列を作成
local playerPoints = {
 
}
  1. パラメーター(newPlayer)でプレイヤーポイントを設定するためのローカル関数を作成します。この関数を Players.PlayerAdded イベントに紐づけします。このイベントは、新たなプレーヤーが参加してきたときに発生するものです。
-- Playersを取得
Players = game:GetService("Players")
 
-- 空の配列を作成 
local playerPoints = {
 
}
 
-- 新規プレイヤーのポイントを0にする
local function setPoints(newPlayer)
 
end
Players.PlayerAdded:Connect(setPoints)
  1. name という変数を追加し、プレイヤー名を代入します。さらにテスト用の print 文を入れます。
-- 新規プレイヤーのポイントを0にする
local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
end
Players.PlayerAdded:Connect(setPoints)
  1. name を そのまま連想配列(playerPoints)のキーとして挿入し、値を0に設定します。
-- 新規プレイヤーのポイントを0にする
local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    playerPoints[name] = 0	
end
 
Players.PlayerAdded:Connect(setPoints)
  1. name でプレイヤー名を、playerPoints[name] でそのキーの値を表示します。
-- Playersを取得
Players = game:GetService("Players")
 
-- 空の配列を作成
local playerPoints = {
 
}
 
-- 新規プレイヤーのポイントを0にする
local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    playerPoints[name] = 0
    print( name .. " has " ..playerPoints[name] .. " points.") 
end

Players.PlayerAdded:Connect(setPoints)

コメントを残す