辞書は、名前や キー をインデックスではなく値と関連付けるテーブルです。
例:
Luau 辞書構文
local pet = {Name = "Bobbie",Type = "Dog",}
値をラベル化する必要があるときは、辞書を使用して、配列でリストされる順序でリストするのではなく、使用します。このチュートリアルでは、プレイヤーに関連付けられた値を操作して、辞書を使用する練習を行う。
辞書構文
配列と同様、辞書はカーリーブレックетで変数に割り当てられます {}。 キー-値ペア は、コンマで区切られた別の行に保存されます。キーと値は、文字列、数、変数名など、任意のデータタイプであることができます。
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
パーツや他のインスタンスオブジェクトをキーとして参照するには、括弧を使用します。
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
辞書を作成する
一般的な辞書の使用の一つは、プレイヤーまたはキャラクター情報の整理です。これらのステップでは、理論的な敵キャラクターの情報がどのように保存され、アクセスできるかを探索します。
新しいスクリプトで、enemy という名前の辞書を作成します。
local enemy = {}辞書の最初のキーは、Name という変数で敵の名前を追跡します。
local enemy = {Name}キーに敵の名前を割り当て、続いてコンマで区切る。
local enemy = {Name = "Spike",}敵が持つべき体力の量について、2番目のキー-値ペアを追加します。キーは常に同じデータ型を使用する必要がありますが、値は使用しなくてもよいことを覚えてください。
local enemy = {Name = "Spike",Health = 1000,}
辞書値を使用
辞書値にアクセスする方法は 2 つあります:
- tableName["keyName"] (重要なことに、引用を注意してください)
- tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
どのスタイルを使用するかは、通常、テーブルの目的によります。サーバー上のプレイヤーのリストのような値のコレクションを保持するテーブルの場合、コーダーは通常 tableName["keyName"] を使用します。オブジェクトを説明するために使用される辞書では、コーダーは tableName.keyName を使用する可能性が高い。
辞書バリューを変更
キーの値を変更することは、他の変数と同じです;等しい = 演算子を使用します。
enemy テーブルの下で、敵の名前を別のものに設定します。
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)プレイテストして出力ウィンドウをチェック。
既存の変数をキーとして使う
辞書は、スクリプトの他の部分で宣言された既存の変数と相互作用できます。次のコード例では、変数を使用して参加者の名前をキーとして追加し、その後、ポイントの値を 0 に設定します。
In ServerScriptService で、PlayerPoints という名前の新しいスクリプトを作成しますスクリプトで、プレイヤーサービスを取得して、playerPoints という空の辞書を作成します。
local Players = game:GetService("Players")local playerPoints = {}新しいプレイヤー変数のパラメータでプレイヤーポイントを設定するローカル関数をコードします。関数を Players.PlayerAdded イベントに接続します。
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)機能では、変数を追加して、プレイヤーの Name 、すべての プレイヤー オブジェクトのプロパティ、およびテスト用の印刷ステートメントを取得します。
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endname をキーとして playerPoints 辞書に挿入し、値、プレイヤーのポイントを 0 に設定する
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0endname を使用して、プレイヤーの名前を印刷し、playerPoints[name] で変数に一致するキーの値を印刷します。
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0print(name .. " has " .. playerPoints[name] .. " points.")endプロジェクトを実行して出力を観察する。
終了したスクリプト
local Players = game:GetService("Players")
local playerPoints = {
}
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)
オプションの課題
以下は、辞書を異なる方法で使用する際のいくつかの課題です。これらのコードを構築できるかどうかを確認してください。
- プレイヤーに時間経過でダメージを与えるトラップパーツを作成します。プレイヤーがトラップに触れると、ダメージを与え、待ってから再びダメージを受けるようにします。
- 2人のプレイヤーのうち、辞書にアクセスして最もポイントが多いプレイヤーをチェックする関数を作成します。
- 暗号を作成し、1つの弦を別の弦に交換するシステムを作成して「秘密」コードを作成する。たとえば、文字「A」は「G」と交換でき、単語「リンゴ」は「オレンジ」と交換できます。
辞書と pairs()
pairs() は、 辞書 を反復するためによく使用される関数です。以下の例を参照してください。
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() は、辞書要素のキー、値、または両方を操作するために使用できます。以下の for ループでは、最初の変数がキーです。2番目の変数は、値です。使用したい辞書は、pairs() に渡されます。
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
実行すると、コードは次のものを印刷します:
You have:43 Gold Bricks3 Carrots2 Torches
要約
辞書は、インデックス化された値の代わりにキー-値ペアを使用するテーブルです。辞書と配列は、変数にカーリーブレックetsを割り当てることで同様に開始します。コンマで区切ってエントリを分離します。
辞書内のすべてのキーは同じデータ型を使用する必要がありますが、値は問題なくデータ型を混在させることができます。
辞書へのアクセス方法は、その目的を伝えることができます。敵のプロパティの辞書は、ドット演算子でアクセスされる可能性が高いが、名前のリストは tableName[keyName] を使用する可能性が高い。
括弧を使用するときは注意してください; テーブル内で作成されたキー名はストリングとして処理されなければなりません: tableName["keyName"]。しかし、パーツなどのオブジェクトを参照するときは、引用符は必要ありません: tableName[keyName]。
多くのスクリプトは辞書や配列を通過する必要がありますが、これらのデータ構造の開始と終了を常に知ることはできません。たとえば、プレイヤーの辞書が変更されているか、プレイヤーが異なるサイズのアレイのインベントリを持っている可能性があります。
これらの状況では、pairs() と ipairs() を for ループで使用して、既知の開始と終了ポイントなしで各要素を通過できます。また、in キーワードを通じて一般的な反復を使用して、pairs() または ipairs() が必要なく、要素をループできます。