配列に変更を加える

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

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

この記事では、値を追加および削除するためのテーブル用の事前構築された関数を概説し、値を検索する方法を説明します。

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

配列に値を追加する

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

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

  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. プロジェクトを実行します。Outputで、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. プロジェクトを実行します。Outputウィンドウでは、最後の値である"Sleeping Bag"が印刷されないはずです。

インデックスで削除する

配列の特定の位置にある値を削除するには、第二のパラメータに削除するインデックスを入力します。たとえば、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. 2つのパラメータを持つ新しい関数findValue()をコーディングします。

    • whichArray - 検索する配列。

    • itemName - 確認する特定の文字列。

      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("The value is at index " .. 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 " .. index .. ": " .. itemString)
    end
  3. プレイテストを行い、最初の"Bread"値が配列から削除されたことを確認します。findValue()の第二のパラメータを変更して他の値を削除してみてください。

    この関数が一度呼び出されたため、最初のインスタンスの"Bread"のみが削除されたことに注意してください。次のセクションでは、すべてのインスタンスを見つけて削除する方法について説明します。

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

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

  1. 少なくとも4つの値と一組の重複を持つplayerItemsという名前の配列を使用します。

    local playerItems = {
    "Potion",
    "Bread",
    "Bread",
    "Sleeping Bag"
    }
  2. 配列を通過するために、playerItems#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 " .. index .. ": " .. itemString)
    end
  5. スクリプトを実行し、すべての"Bread"という名前の値が削除されたことを確認します。

まとめ

値は配列に追加または削除できますが、その際にインデックスがシフトすることに注意してください。ループを使用してテーブルを反復処理し、値のすべてのインスタンスを削除するか、見つかった最初のインスタンスのみを削除します。

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

スクリプトの完成版は以下で参照できます。

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

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

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