masa veri türü, şu anda nil birkaç değerini depolayabilir, örneğin booleans, 1> sayılar1>, 4> yazılar4>, 7> işlevler7> ve diğer tablolar dahil olmak üzere. Şu anda kıvrımlı
-- Değişken "t" için atanmış boş bir tablo oluşturlocal t = {}print(t) -- {}
Bir tabloyu bir masa veya bir sözlük olarak kullanabilirsiniz. Masalar, indeks olarak sıralanmış bir liste kullanır, ancak sözlükler, sayılar, yazılar ve nesneler olarak indeksleri vardır.
Tabelerle çalışmak için içerleşik işlevler için daha fazla bilgi için table kütüphanesine bakınız.
Matrisler
Bir matris is an ordered list of values. Matrisler, özel izinleri olan bir grup oyuncunun depolandığı için veri koleksiyonlarını depolamak için kullanışlıdır.
Matris Oluşturulması
Luau tablosunu kullanarak bir matris oluşturmak için değerleri komalarla ayrı ayrı ilan edin.
-- Üç öğelden oluşan bir matris oluşturlocal testArray = {"A string", 3.14159, workspace.Camera}print(testArray)
Matrislerden Okuyor
Bir matrisden okumak için, referansından sonra birkaç kareli parantez ekle ve elemanın içindeki indeks numarasını belirt ([pos]):
-- Üç öğelden oluşan bir matris oluşturlocal testArray = {"A string", 3.14159, workspace.Camera}print(testArray[1]) -- Bir diziprint(testArray[2]) -- 3.14159print(testArray[3]) -- Camera
Matrislere Yazma
Bir indeksteki bir matrisin değerini tanımlamak veya yeniden yazmak için, değeri [index] ile önceki = ile açıklayın ve değeri ile değer:
local testArray = {"A string", 3.14159, workspace.Camera}testArray[2] = 12345testArray[4] = "New string"print(testArray[2]) --12345print(testArray[4]) -- New string
Matrisler üzerinde itme
Bir matris üzerinde iterebilmek için bir for döngüsü kullanabilirsiniz. Çünkü matrisler sayısal indeksleri vardır, sayısal bir for döngüsü de 1 ile matrisin uzunluğuna kadar kullanabilirsiniz ( 2># array2> ).
local testArray = {"A string", 3.14159, workspace.Camera, "New string"}-- Genel itmeyi kullanarak döngüfor index, value in testArray doprint(index, value)end-- Matrix uzunluğu operatörü (#) kullanılarak itere edinfor index = 1, #testArray doprint(index, testArray[index])end--[[ Sonuç çıkışı:1 A string2 3.141593 Camera4 New string1 A string2 3.141593 Camera4 New string]]
Eşyaların Yerleştirilmesi
Bir öğeyi bir matrisin sonuna eklemek için iki yerleşik yol var:
- Bir referansı matris ve öğe değerine Luau'nun table.insert() işlevine geçerlidir.
- Yeni öğeyi array[#array+1] sentezini kullanarak matrisine ekleyin.
local testArray = {"A string", 3.14159}table.insert(testArray, "New string")testArray[#testArray+1] = "Another new string"print(testArray[3]) -- Yeni diziprint(testArray[4]) -- Another new string
Bir matrisin başlangıcından sonuna bir öğe girmeyi, table.insert() ile ikinci argüman olarak bir konum değeri içer. Bu, yeni öğeyi yerleştirir ve aşağıdaki öğeleri bir indeks pozisyonuna iter.
local testArray = {"First item", "Next item"}table.insert(testArray, 2, "NEW ITEM #2")print(testArray[1]) -- İlk öğeprint(testArray[2]) -- Yeni Öğe #2print(testArray[3]) -- Next item
Eşyaları Kaldırma
Bir matrisinden bir öğeyi kaldırmak için table.remove() kullanın. Bu, belirli bir pozisyondaki öğeyi kaldırır ve takip eden herhangi bir öğeyi bir dizi pozisyonuna yeniden hareket ettirir.
local testArray = {"First item", "Next item", "Last item"}table.remove(testArray, 2)print(testArray[1]) -- İlk öğeprint(testArray[2]) -- Last item
Sözlükler
Sözlükler matematiksel bir ifadenin kümesidir. Matematiksel ifadeler herhangi bir sayı, diziveya nesne olabilir.
Sözlükler Oluşturulması
Bir sözlük tablosu oluşturmak için, her bir anahtar , = ve değer ile takip edilmiş olmalıdır. Ayrıca, her bir anahtar-değer çiftini bir koma ile ayrıklayın:
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}
Sözlüklerin anahtarları sayı, yazı veya nesne olabilir. Örneğin, bir anahtar da bir Instance olabilir. Kullanmak için nesneleri anahtarlar olarak kullanmak için kлюci karelerle açıklayın ([key]):
local part = Instance.new("Part")local testDictionary = {PartType = "Block",[part] = true}
Sözlüklerden Okuyor
Bir sözlükten okumak için, referansından sonra birkaç parça boşluk ekleyin ve anahtar ismini belirtin. Kısayol kullanarak bir yuva kaynağına doğrudan referans verin ( ["key"] ) veya değişken bir değer kullanın ( [key] ).
local part = Instance.new("Part")local testDictionary = {PartType = "Block",[part] = true}-- Yuva anahtarları için alıntıları içerecekprint(testDictionary["PartType"]) -- Blok-- String olmayan anahtarlar için alıntıları gizleyinprint(testDictionary[part]) -- true
Sözlüklerde Yazma
Yeni veya mevcut bir sözlük anahtarının değerini tanımlamak veya yeniden yazmak için, anahtar ismini [key] ile başlayan = ve değerini içeren kısa bir satır içerir:
local testDictionary = {FruitName = "Lemon",Sour = true}-- Mevcut anahtarların değerini değiştirtestDictionary["FruitName"] = "Cherry"testDictionary["Sour"] = false-- Yeni anahtar değeri çiftini girintestDictionary["FruitCount"] = 10print(testDictionary["FruitName"]) -- Kirazprint(testDictionary["Sour"]) -- yanlışprint(testDictionary["FruitCount"]) -- 10
Sözlükler üzerinde iteleniyor
Bir sözlüğü itereceğinizde, global pairs() işlevini bir for döngüsünde kullanın:
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}for key, value in pairs(testDictionary) doprint(key, value)end--[[ Sonuç çıkışı:FruitName LemonSour trueFruitColor Yellow]]
Kilit Değerleri Çiftlerinden Kaldırma
Bir sözlükten bir anahtar değeri çiftini kaldırmak veya silmek için, değerini bir anahtara nil ayarla.
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}testDictionary["Sour"] = nilfor key, value in pairs(testDictionary) doprint(key, value)end--[[ Sonuç çıkışı:FruitName LemonFruitColor Yellow]]
Tablolar Rehberlik Eşyaları
Yeni bir değişkende bir tabloyu sakladıysanız, Luau orijinal tabloyu bir bağlantı veya bir işaretleyici olarak oluşturmaz. Bunun yerine, değişken bir referans olarak veya işaretleyici olarak orijinal tabloyu görüntürür. Herhangi bir referans bir tabloyu yansıtır:
local originalArray = {10, 20}local arrayReference = originalArrayprint("Original:", originalArray[1], originalArray[2])print("Reference:", arrayReference[1], arrayReference[2])-- Değerleri orijinal matrisinde değiştiroriginalArray[1] = 1000originalArray[2] = 2000print("Reference:", arrayReference[1], arrayReference[2])--[[ Sonuç çıkışı:Original: 10 20Reference: 10 20Reference: 1000 2000]]
Tabloları Klon Etme
Yüzey Klonları
Herhangi bir altındaki tabeleri kopyalamak için, Luau table.clone() yöntemini sunuyor.
local original = {key = "value",engine = "Roblox",playerID = 505306092}local clone = table.clone(original)
Derin Klonlar
Dahili olarak kümeleşmiş tablarla daha karmaşık bir tablosunu kopyalamak için takip edilengibi bir recursive işlevi kullanmanız gerekir:
-- Bir tabloyu derin bir şekilde kopyalamak için kullanılan işlev
local function deepCopy(original)
-- Kopya için yeni tablosunu tanımlayın
local copy = {}
-- Klon etmek için orijinal tabela aracılığıyla bir dizi oluştur
for key, value in original do
-- Değerin türü bir tabloysa, değeri anahtara (indeks) kadar derin kopyalayın
-- Aksi takdirde (veya) tip bir tablo değil, değerleri değiştir
copy[key] = type(value) == "table" and deepCopy(value) or value
end
-- Derin klonlu masanın son kopyasını iade edin
return copy
end
İşlev dünya, şu şekilde derin bir kopya oluşturabilirsiniz:
local original = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepCopy(original)
Donan Tabloları
Bir tabloyu dondurmak onu okuma-yalan yapar, bu da istemediğiniz değiştirilmez değerler oluşturmak için yararlıdır. Dondurma da kalıcıdır; "unfreeze" veya "thaw" yöntemi yoktur. Bir tabloyu dondurmak için kullanın table.isfrozen().
Az Derinlikler Donar
Herhangi bir ağır içinde ağır olmayan bir tabloyu dondurmak için, Luau table.freeze() yöntemini sunuyor.
local target = {key = "value",engine = "Roblox",playerID = 505306092}table.freeze(target)target.playerID = 1 --> attempt to modify a readonly table
Derin Dondurma
Dahili olarak geleneksel olmayan daha karmaşık bir tabloyu dondurmak için takip edilengibi bir recursive işlev kullanın:
local function deepFreeze(target)
-- Masa çok yavaş dondurulur
table.freeze(target)
-- Her tablodaki anahtarı kontrol edin ve dondurun, eğer bir tabloysa
for _, v in target do
if type(v) == "table" then
deepFreeze(v)
end
end
end
İşlev dünya, bir tabloyu şu şekilde derin dondurabilirsiniz:
local target = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}deepFreeze(target)target.playerInfo.playerID = 1 --> attempt to modify a readonly table