配列の変更を行う

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

配列の内容は、プレイヤーのインベントリからアイテムを削除する必要があるときなど、頻繁に変更する必要があります。Luauには、これを簡単にするためにテーブルと一緒に使用できるビルトイン関数があります。

この記事では、値の検索方法を説明しつつ、追加や削除のようなテーブル用のあらかじめ作成された関数を概説します。

これらのスキルを応用するために、プレイヤーのインベントリを管理するスクリプトを作成します。

配列に値を追加する

配列に新しい値を追加するには、table.insert(array, valueToInsert)を使用します。2番目のパラメータには、文字列、数値、またはPlayerIntValueのようなオブジェクト全体など、任意の値を指定できます。

練習のために、プレイヤーアイテムをテーブルに保存し、それに追加するスクリプトを作成します。この例はスクリプトのみであるため、任意のファイルやプロジェクトで使用できます。コードのテストは、出力ウィンドウを使用して行います。

  1. playerItemsという名前の空の配列を作成します。


    playerItems = {}
  2. table.insert()と入力して、配列にインベントリアイテムを追加します。カッコ内に、追加するテーブルであるplayerItemsを入力し、各アイテムの文字列を続けて入力します。少なくとも3つの値を挿入します。


    playerItems = {}
    table.insert(playerItems, "Potion")
    table.insert(playerItems, "Bread")
    table.insert(playerItems, "Sleeping Bag")
    print(playerItems)
  3. プロジェクトを実行します。出力ウィンドウで、3つのドット...を展開して印刷されたテーブルを確認します。

配列から値を削除する

値を削除するには、プレイヤーがアイテムを使用したときや、アクティブプレイヤーのリストの誰かが体験から離れたときなどに、table.remove()を使用します。提供されたパラメータによっては、関数はテーブルの最後の値を削除するか、特定のインデックスで削除することができます。

最後の値を削除する

時には、特定のアイテムを削除する必要がある場合があります。例えば、プレイヤーのインベントリの最初のアイテムを削除したり、リストの最初のプレイヤーを選択したりする場合です。配列の最後の値を削除するには、table.remove(arrayName)を使用します。この場合、必要な唯一のパラメータはテーブル自体です。

  1. 前の例からアイテムの配列を使用します。次に、テーブルから最後の値(この場合は"Sleeping Bag")を削除するために、table.remove(playerItems)と入力します。


    playerItems = {}
    table.insert(playerItems, "Potion")
    table.insert(playerItems, "Bread")
    table.insert(playerItems, "Sleeping Bag")
    table.remove(playerItems)
    print(playerItems)
  2. プロジェクトを実行します。出力ウィンドウで最後の値"Sleeping Bag"が印刷されないことを確認します。

インデックスで削除する

配列の特定の位置にある値を削除するには、2番目のパラメータに削除するインデックスを入力します。例えば、table.remove(arrayName, 1)のようにします。

  1. 同じテーブルを使用して、table.remove()と入力します。パラメータには、テーブルの名前と1(削除する値)を入力します。


    playerItems = {}
    table.insert(playerItems, "Potion")
    table.insert(playerItems, "Bread")
    table.insert(playerItems, "Sleeping Bag")
    table.remove(playerItems, 1)
  2. プロジェクトを実行します。最初の値"Potion"が削除されたことを確認します。

配列内の値を検索する

特定の値を配列内で、例えば勝利したプレイヤーの名前を見つけるには、table.find()関数を使用します。あるいは、forループとifステートメントを使用して自分自身で検索関数をコーディングすることもできます。

単一の値を見つけて返す

配列内の値を見つけるために、まず、配列を通過し、一致する値が見つかった最初の場所で停止するfindValue()という名前の関数を作成します。

値を見つけると、その関数はreturnキーワードを使用して、その値のインデックスを返します。インデックスを使えば、配列からそれを削除できます。

  1. 次に示す配列playerItemsをコピーします。


    local playerItems = {
    "Potion",
    "Bread",
    "Bread",
    "Sleeping Bag"
    }
  2. whichArray(検索する配列)とitemName(確認する特定の文字列)の2つのパラメータを持つ新しい関数findValue()をコードします。


    local function findValue(whichArray, itemName)
    end
  3. findValue()内で、forループを使用して、配列内の任意の値がitemNameに一致するかどうかを確認します。値が一致する場合、キーワードreturnを使用して、currentIndexに見つかった値を返します。


    local function findValue(whichArray, itemName)
    for currentIndex = 1, #whichArray do
    if whichArray[currentIndex] == itemName then
    return currentIndex
    end
    end
    end
  4. valueFoundという変数を作成し、findValue()を呼び出して検索関数をテストします。検索する配列と、検索する値を渡します。コードを実行して、期待される出力がインデックス2であることを確認します。


    local function findValue(whichArray, itemName)
    for currentIndex = 1, #whichArray do
    if whichArray[currentIndex] == itemName then
    -- currentIndexの値を返す
    return currentIndex
    end
    end
    end
    local valueFound = findValue(playerItems, "Bread")
    print("値はインデックス " .. valueFound .. " にあります")

値を削除する

見つけ関数を使用して値が見つかった場合、それを削除することができます。valueFoundの中に値があるかどうかをifステートメントで確認します。

  1. valueFoundの中に値があるかどうかを確認し、ある場合はtable.remove()を使用してその値を削除します。


    if valueFound then
    table.remove(playerItems, valueFound)
    end
  2. 次のコードを使用して配列を印刷します。


    for index = 1, #playerItems do
    local itemString = playerItems[index]
    print("インデックス " .. index .. ": " .. itemString)
    end
  3. プレイテストして、最初の"Bread"の値が配列から削除されたことを確認します。findValue()の第2パラメータを変更することで、他の値を削除してみてください。

    この関数は一度呼ばれたため、"Bread"の最初のインスタンスのみが削除されました。次のセクションでは、全てのインスタンスを見つけて削除する方法を説明します。

特定の値の全てのインスタンスを見つけて削除する

前のコードは見つかった値の最初のインスタンスのみを削除できましたが、このコードスニペットは配列内の全ての出現を見つけて削除します。例えば、プレイヤーがゲーム内の店で全てのパンを売りたい場合などです。

  1. 少なくとも4つの値と重複のセットを持つplayerItemsという配列を使用します。


    local playerItems = {
    "Potion",
    "Bread",
    "Bread",
    "Sleeping Bag"
    }
  2. 配列を通過するために、#playerItemsから1に向けて、-1ずつ増加するforループを作成します。


    for index = #playerItems, 1, -1 do
    end
  3. ループ内でifステートメントを使用して、playerItems[index]の値が"Bread"と等しいかどうかを確認し、そうであればそのアイテムを削除します。


    for index = #playerItems, 1, -1 do
    if playerItems[index] == "Bread" then
    table.remove(playerItems, index)
    end
    end
  4. 配列を印刷する2つ目のforループを追加するために、次のコードを使用します。


    for index = 1, #playerItems do
    local itemString = playerItems[index]
    print("インデックス " .. index .. ": " .. itemString)
    end
  5. スクリプトを実行して、全ての"Bread"という名前の値が削除されていることを確認します。

まとめ

値は配列に追加または削除することができますが、そうすることでインデックスがシフトすることに注意が必要です。ループを使用してテーブルを反復し、値の全てのインスタンスを削除したり、見つかった最初のインスタンスを削除したりします。

returnキーワードを使用してループを停止し、必要に応じて情報を返すことができます。

完成したスクリプトのバージョンは、以下で参照できます。

このプロジェクトには、このチュートリアルの全てのスクリプトが含まれています。ダウンロードはこちらから。

すべてのスクリプトはServerScriptServiceにあり、無効になっています。スクリプトを使用するには、プロパティで無効フィールドのチェックを外し、スタジオを実行します。

©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。