アレイの内容は、よく変更される必要があります、例えば、プレイヤーのインベントリからアイテムを削除する必要があるときなど。Lua には 預製関数 があり、これをテーブルで使用してこれをより簡単にすることができます。
この記事では、値を検索する方法を説明しながら、「+」や「削除」などのテーブルのプリビルド機能について説明します。
これらのスキルを適用するには、ゲームでプレイヤーのインベントリを管理するスクリプトを作成します。
配列に値を追加する
新しい値をアレイに追加するには、table.insert(array, valueToInsert) を使用します。2番目のパラメーターは、Player やIntValue などの任意の値です。
練習用に、プレイヤーのアイテムをテーブルに保存し、それに追加するスクリプトを作成します。この例はスクリプトですので、任意のファイルまたはプロジェクトに追加できます。コードをテストするには、出力ウィンドウを使用します。
空の配列を作成して playerItems と名付けます。
playerItems = {}配列にインベントリアイテムを追加するには、table.insert() を入力します。 パラグラフには、playerItems 、追加するテーブルを、次のストリングですべてのアイテムを追加します。最大 3つの値を挿入します。
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)プロジェクトを実行します。出力で、3つのドットを拡張して印刷されたテーブルを表示します。
配列から値を削除する
要素を削除するには、プレイヤーがアイテムを使用したり、アクティブなプレイヤーのリストにある人がエクスペリエンスを終了したりするような場合は、table.remove() を使用します。パラメーターに応じて、機能は最後の値をテーブルの最後の値または特定のインデックスで削除できます。
最後の値を削除する
スクリプトは持ち物リスト定のアイテムを削除する必要があります。たとえば、プレイヤーのインベントリの最初のアイテムを削除するか、またはリストで最初のプレイヤーを選択します。配列の最後の値を削除するには、table.remove(arrayName) を使用します。この使用ケースでは、必要なパラメータはテーブル自体です。
前の例のアイテムの陣を使用します。次に、テーブルの最後の値を削除するために、この場合 "Sleeping Bag"、型 table.remove(playerItems) を使用します。
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems)print(playerItems)プロジェクトを実行します。出力ウィンドウで、最後の値、 "Sleeping Bag" が印刷されないです。
インデックスを使用して削除
アレイの特定のポイントに値を削除するには、table.remove(arrayName, 1) などのインデックスを入力して削除します。
同じテーブルを使用して、table.remove() を入力します。パラメーターで、テーブルの名前と 1 を入削除します。
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)プロジェクトを実行します。最初の値「ポーション」が削除されているかどうかを確認します。
配列の値を検索しています
配列に特定の値を見つけるには、例えば勝利したプレイヤーの名前のように、table.find() 機能を使用します。また、for ループと if 文を使用して、自分の検索関数をコードできます。
単一の値を検索して返す
配列に値を見つけるには、findValue() という名前の関数を作成して、配列を通過し、最初に一致する値を見つけると停止します。
値を見つけたら、関数は return キーワードを使用して、その値のインデックスを返します。インデックスを使用すると、マトリックから削除できます。
以下に playerItems という名前のアレイをコピーします。
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}コード a new function 名前 findValue() 2つのパラメータで:
whichArray - 検索する配列。
itemName - チェックする特定の文字列。
local function findValue(whichArray, itemName)end
In findValue() で、ループを使用して配列の値が itemName と一致しているかどうかをチェックします。如果値が一致した場合は、キーワードを使用して return を返します。在 1> currentIndex1> で見つかった値を返します。
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendendvalueFound を作成し、findValue() を呼び出して検索機能をテストします。配列にパスを渡し、検索する必要がある値を検サーチします。 Run コードを実行して、期待される出力がインデックス 2 であることを確認します。
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then--現在のインデックスの値を返戻るますreturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("The value is at index " .. valueFound)
値を削除する
ファインド関数を使用して値が見つかった場合は、削除できます。if 文で値が見つかっているかどうかをチェックします。
Check if a value is inside valueFound ; if so, remove the value using table.remove() .
if valueFound thentable.remove(playerItems, valueFound)endコードを使用して配列を印刷します。
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)end最初の "Bread" 値がアレイから削除されているかどうかをプレイテストして確認します。 findValue() の 2つ目のパラメータを変更して他の値を削除してください。
この関数が呼び出されたことに気づいてください、これは "Bread" の最初のインスタンスだけが削除されました。次のセクションでは、すべてのインスタンスを見つけ、削除する方法について説明します。
特定の値をすべて見つけて削除する
前のコードは、見つけた値の最初のインスタンスだけを削除できましたが、このコードスナップは、アレイからすべてのオーケーションを見つけて削除できます。たとえば、プレイヤーがゲーム内ストアですべてのパンを売却したい場合は、このコードスナップを見つけて削除できます。
最低 4 値と duplicates のセットを持つ名前のある配列を使用してください。
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}配列を通過するには、 後ろ向き playerItems を通過する、 #playerItems から開始し、1> -11> で終了し、4>インクリメント4>です。
for index = #playerItems, 1, -1 doendループで、if 文を使用して playerItems[index] 内の値が "Bread" と一致しているかどうかをチェックします。
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endend以下のコードを使用して、配列を印刷するループを追加する 2つ目の for。
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endスクリプトを実行し、「パン」という名前のすべての値が削除されているかどうかを確認します。
概要
値は配列に追加されるか、削除されるか、インデックスが変更される可能性がありますが、インデックスが変更されると値のインスタンスがすべて削除される可能性があります。また、最初に見つかったインスタンスのみをイテレートしてテーブルをループしてすべてのインスタンスの削除を行うこともできます。
キーワード return は、ループを停止し、必要に応じて情報を戻すために使用できます。
スクリプトの完成したバージョンは、以下に参照できます。
次のプロジェクトには、このチュートリアルで説明するすべてのスクリプトが含まれています。ダウンロード ここ。
すべてのスクリプトは ServerScriptService にあり、 無効 です。スクリプトを使用するには、プロパティで 無効 をチェックし、Studio を実行します。