辞書は、インデックスではなく、名前または「*キー**」を値として関連付けるテーブルです。
例:
Lua ディクションスタイル
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])
辞書を作成する
ディクションの使用は、1日1回以上のプレイヤーまたはキャラクター情報を整理することです。これらのステップは、理論的な敵キャラクターの情報がどのように保存され、アクセスされるかを探索します。
新しいスクリプトで、enemy という名前の辞典を作成します。
local enemy = {}辞書の第 1 キーは、 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 の下の enemy テーブルの下で、敵の名前を別のものに設定します。
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)プレイテストして出力ウィンドウをチェックします。
既存の変数をキーとして
辞書は、スクリプトの他の部分で宣言された既存の変数とインタラクトできます。次のコーディング例では、変数を使用してプレイヤーの名前をキーとして追加し、その後ポイント値を 0 に設定します。
In ServerScriptService で、PlayerPoints という名前の新しいスクリプトを作成します。スクリプトでは、PlayersService を取得し、Empty ディクティオンを作成します。
local Players = game:GetService("Players")local playerPoints = {}新しいプレイヤー変数の設定のためのローカル関数をコードします。関数を Players.PlayerAdded イベントに接続します。
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)関数に、プレイヤーの Name 、すべての Player オブジェクトのプロパティを追加し、テスト用のプリントステートメントを追加します。
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)end名前を playerPoints ディクタリオネットワークにキーとして入れ、値をプレイヤーのポイントに設定します。
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0endUse name を使用してプレイヤーの名前と 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つの単語を別の「入れ替える」1つの単語で作成できます。たとえば、「A」は「G」と入れ替えることができ、「アップル」は「オレンジ」と入れ替えることができます。
辞書とペア()
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
概要
辞書は、インデックスされた値ではなく、キー値のペアを使用するテーブルです。辞書と配列は、変数にカーリーブラックを割り当てることで始まります。入力をコマを使用して分離します。
辞書内のすべてのキーは同じデータタイプを使用する必要がありますが、値は問題なくデータタイプを混合できます。
辞書のアクセススタイルは、辞書の目的を伝えることができます。敵のプロパティのダイクトオペレーターである可能性のあるダイクトリをアクセスする場合、名前のリストは tableName[keyName] を使用する可能性があります。
ブラケットを使用するときは注意してください; テーブル内に作成されたキー名は「tableName」でなければなりません: tableName["keyName"] 。しかし、部品などのオブジェクトに参照するときは引用は必要ありません: tableName[keyName] 。
多くのスクリプトは辞書や配列を経てから実行する必要がありますが、これらのデータ構造の開始と終了を常に把握することはできません。たとえば、プレイヤーの辞書が変更されるか、プレイヤーが変更可能なサイズのアレイインベントリを持つかもしれません。
これらの状況では、pairs() と ipairs() を使用して、各要素を通過するために、for ループで各要素を知らない開始と終了ポイントなしで使用できます。1> in1> キーワードを通じ