配列に変更を加える

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

プレイヤーのインベントリからアイテムを削除する必要があるときのように、アレイの持ち物リスト容を変更する必要があることが多いです。Luau には、 内蔵機能 があり、テーブルを使用してこれを簡素化するために使用できます。

この記事では、追加や削除などのテーブルのプリビルド機能を概説し、値を検索する方法を説明します。

これらのスキルを適用するには、ゲームでプレイヤーのインベントリを管理するのを助けるスクリプトを作成します。

アレイに値を追加する

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

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

  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"、は印刷しないでしょう。

インデックスで削除

アレイの特定のポイントで値を削除するには、table.remove(arrayName, 1) などの削除インデックスを第 2 パラメータに入力してください。

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


    playerItems = {}
    table.insert(playerItems, "Potion")
    table.insert(playerItems, "Bread")
    table.insert(playerItems, "Sleeping bag")
    table.remove(playerItems, 1)
  2. プロジェクトを実行します。最初の値「ポーション」が削除されたかどうかをチェックします。

配列の値を検索する

配列に特定の値を見つけるには、勝利したプレイヤーの名前のように、table.find() 関数を使用します。代わりに、for ループと if 文を使用して、独自の検索機能をコードできます。

単一の値を見つけて返す

アレイに値を見つけるには、findValue() という名前の関数を作成し、アレイを通り抜けて最初に一致する値を見つけるのを停止します。

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

  1. 以下の名前の array をコピーします playerItems


    local playerItems = {
    "Potion",
    "Bread",
    "Bread",
    "Sleeping Bag"
    }
  2. 2つのパラメータで新しい機能 findValue() をコードします:

    • whichArray - 検索する配列。

    • itemName - チェックする特定の文字列。


      local function findValue(whichArray, itemName)
      end
  3. In 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
    --現在のインデックスの値を戻るす
    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() の 2番目のパラメータを変更して、他の値を削除してみてください。

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

特定の値をすべて見つけて削除

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

  1. 使用する配列の名前は playerItems 、少なくとも 4つの値と 複製セット が含まれています。


    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 index = 1, #playerItems do
    local itemString = playerItems[index]
    print("Index " .. index .. ": " .. itemString)
    end
  5. スクリプトを実行し、「パン」という名前のすべての値が削除されているかどうかを確認します。

概要

値はアレイに削除または追加できますが、インデックスが移動することに注意してください。ループを使用して、テーブルを順回しして値のすべてのインスタンスを削除するか、最初に見つかったインスタンスのみを削除します。

キーワード return はループを停止し、必要なところに情報を送り返すのに使用できます。

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

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

すべてのスクリプトが ServerScriptService無効 にあることに注意してください。スクリプトを使用するには、プロパティで [無効] フィールドをオフにして、Studio を実行します。