陣列的內容通常需要變更,例如需要從玩家的道具欄中移除道具。Lua 有 預製函數 可以與桌子一起使用,以此來簡化此過程。
此文件將詳細介紹桌子的預處理功能,例如添加和移除,並在說明如何搜尋值。
要應用這些技能,您將創建一個幫助管理玩家道具欄的指令碼。
將值添加到陣列
要將新值添加到陣列中,請使用 table.insert(array, valueToInsert) 。第二個參數可以是任何值,例如字串、數字或整個對物件,例如 Player 或 IntValue 。
為了練習,你會創建一個存儲玩家物品在桌子中的指令碼,然後添加到它。這個範例是一個指令碼,因此可以與任何檔案或項目添加。測試代碼將在輸出窗口中完成。
建立名為 playerItems 的空陣。
playerItems = {}使用 table.insert() 將物品添加到陣列。在括號中,輸入 playerItems,表示要添加的表,並在每個道具目後面加入一個字串。在最少三個值。
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)執行項目。在輸出中,將三個點 ... 擴展到可印表。
從陣列中移除值
要移除值,例如玩家使用了一個物品或某人在啟用的玩家列表中離開體驗,請使用 table.remove() 。 依據提供的參數,功能可以移除表中的最後值,或在特定索引。
移除最後一值
有時候需要移除特定項目。例個體、實例,移除玩家的道具欄中的第一個項目,或選擇列表中的第一個玩家。要移除陣列中的最後一個值,請使用 table.remove(arrayName) 。在此使用案例中,唯一的參數是表本身。
使用上一個範例中的項目列表。然後,在此範例中,要從表中移除最後一個值,請使用 "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)執行項目。在輸出窗口中,最後一個值,"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)執行項目。檢查第一個值 "Potion" 是否已移除。
在陣列中尋找值
要在陣列中尋找特定值,例如贏家玩家的名稱,請使用 table.find() 函數。或者,您可以使用 for 循環和 if 語式來編寫自己的搜索功能。
尋找並返回單一值
若要在陣列中找到值,請建立名為 findValue() 的函數,該函數會在陣列中檢查,並在第一次找到匹配值時停止。
找到值後,函數會使用 return 關鍵字來返回該值的索引。有了索引,你就可以從陣列中移除它。
在下方複製名為 playerItems 的陣列。
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}用兩個參數命名 new 函數,尋找值:
whichArray 列表,可以搜尋。
itemName - 特定字串以檢查。
local function findValue(whichArray, itemName)end
在 findValue() 中,使用 for 循環檢查是否有值在陣列中與 itemName 一致。如果值與 return 一致,請使用關鍵字 1>傳回eturn1> 返回找到在 4> currentIndex4> 中的值。
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendend測試搜尋功能,並且在 valueFound 變量中建立並且呼叫 findValue() 。在陣列中輸入搜尋值,並且查詢它應該搜尋的值。 執行 代碼以確認預期的輸出是索引 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)
移除值
如果使用 find 函數尋找值,它可以被移除。 檢查 if 句子是否找到值。
檢查值是否在 valueFound 內;如果是,請使用 table.remove() 移除值。
if valueFound thentable.remove(playerItems, valueFound)end使用下面的代碼列出陣列。
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)end測試並確認第一個 "Bread" 值已從陣列中移除。 請使用 findValue() 的第二個參數來移除其他值。
注意,因為此功能已呼叫一次,只有 "Bread" 的第一個實例。下一節將涵蓋如何找到並移除所有實例。
尋找並移除特定值的所有
雖然上一個程式碼只能移除找到的第一個實例,但此程式碼片語會找到並移除陣列中的所有發生。舉例來說,如果玩家想在遊戲商商店 商家中出售所有麵包,這個程式碼片語將找到並移除所有發生。
使用名為 playerItems 的陣列,至少包含四個值和一組 重複 。
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}要通過陣列,創建一個 for 循環,返回通過playerItems,開始於#playerItems,結束於 1,並且以 -1 增量。
for index = #playerItems, 1, -1 doend在循環中,使用 if 語句檢查 playerItems[index] 內的值與 "Bread" 相等,並且如果是這樣,請移除道具目。
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endend使用下面的代碼添加一個 second for 循環,它會列出陣列。
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)end執行指令並檢查所有名為 "Bread" 的值是否已移除。
摘要
值可以被移除或添加到陣列,但請小心索引會移動,因此。使用循環來在表中尋找所有值的例子,或只是第一個例子。
關鍵字 return 可以用來停止循環,並在必要時發送資訊回來。
指定的指令碼版本可以在下方參考。
下一個項目包含這個教學中的所有脚本。 下載 這裡。
注意所有腳本都在 ServerScriptService 和 disabled 中。若要使用腳指令碼,請在其屬性中取消 Disabled 的選項,並且執行 Studio。