在陣列上作出變更

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

陣列的內容通常需要變更,例如需要從玩家的道具欄中移除道具。Lua 有 預製函數 可以與桌子一起使用,以此來簡化此過程。

此文件將詳細介紹桌子的預處理功能,例如添加和移除,並在說明如何搜尋值。

要應用這些技能,您將創建一個幫助管理玩家道具欄的指令碼。

將值添加到陣列

要將新值添加到陣列中,請使用 table.insert(array, valueToInsert) 。第二個參數可以是任何值,例如字串、數字或整個對物件,例如 PlayerIntValue

為了練習,你會創建一個存儲玩家物品在桌子中的指令碼,然後添加到它。這個範例是一個指令碼,因此可以與任何檔案或項目添加。測試代碼將在輸出窗口中完成。

  1. 建立名為 playerItems 的空陣。


    playerItems = {}
  2. 使用 table.insert() 將物品添加到陣列。在括號中,輸入 playerItems,表示要添加的表,並在每個道具目後面加入一個字串。在最少三個值。


    playerItems = {}
    table.insert(playerItems, "Potion")
    table.insert(playerItems, "Bread")
    table.insert(playerItems, "Sleeping Bag")
    print(playerItems)
  3. 執行項目。在輸出中,將三個點 ... 擴展到可印表。

從陣列中移除值

要移除值,例如玩家使用了一個物品或某人在啟用的玩家列表中離開體驗,請使用 table.remove() 。 依據提供的參數,功能可以移除表中的最後值,或在特定索引。

移除最後一值

有時候需要移除特定項目。例個體、實例,移除玩家的道具欄中的第一個項目,或選擇列表中的第一個玩家。要移除陣列中的最後一個值,請使用 table.remove(arrayName) 。在此使用案例中,唯一的參數是表本身。

  1. 使用上一個範例中的項目列表。然後,在此範例中,要從表中移除最後一個值,請使用 "Sleeping Bag"``Library.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)

  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. 用兩個參數命名 new 函數,尋找值:

    • whichArray 列表,可以搜尋。

    • itemName - 特定字串以檢查。


      local function findValue(whichArray, itemName)
      end
  3. findValue() 中,使用 for 循環檢查是否有值在陣列中與 itemName 一致。如果值與 return 一致,請使用關鍵字 1>傳回eturn1> 返回找到在 4> currentIndex4> 中的值。


    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)

移除值

如果使用 find 函數尋找值,它可以被移除。 檢查 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. 使用名為 playerItems 的陣列,至少包含四個值和一組 重複


    local playerItems = {
    "Potion",
    "Bread",
    "Bread",
    "Sleeping Bag"
    }
  2. 要通過陣列,創建一個 for 循環,返回通過playerItems,開始於#playerItems,結束於 1,並且以 -1 增量。


    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. 使用下面的代碼添加一個 second for 循環,它會列出陣列。


    for index = 1, #playerItems do
    local itemString = playerItems[index]
    print("Index " .. index .. ": " .. itemString)
    end
  5. 執行指令並檢查所有名為 "Bread" 的值是否已移除。

摘要

值可以被移除或添加到陣列,但請小心索引會移動,因此。使用循環來在表中尋找所有值的例子,或只是第一個例子。

關鍵字 return 可以用來停止循環,並在必要時發送資訊回來。

指定的指令碼版本可以在下方參考。

下一個項目包含這個教學中的所有脚本。 下載 這裡

注意所有腳本都在 ServerScriptServicedisabled 中。若要使用腳指令碼,請在其屬性中取消 Disabled 的選項,並且執行 Studio。