tablo veri türü, booleans , sayılar , dize , fonksiyonlar ve diğer tablolar dahil olmak üzere herhangi bir türden çok sayıda değer saklayabilir.Kıvrımlı parantezlerle tablolar oluştur ( {} ):
-- Değişken "t" için atanan boş bir tablo oluşturlocal t = {}print(t) -- {}
Bir tabloyu bir dizin veya sözlük olarak kullanabilirsiniz.Diziler sayıların sıralı bir listesini indeks olarak kullanır, ancak sözlükler sayılar, dize ve nesneler olarak indeks olabilir.
Tablolarla çalışmak için yerleşik işlevler hakkında daha fazla bilgi için, table kütüphanesine bakın.
Diziler
Bir dizilim düzenli bir değer listesidir.Diziler, özel izinlere sahip bir grup oyuncuyla gibi veri koleksiyonlarını depolamak için yararlıdır.
Diziler oluştur Create arrays
Bir Luau tablosu kullanarak bir dizi oluşturmak için, değerleri virgülle ayrılmış sırayla belirtin.
-- Üç öğe ile bir dizi oluşturlocal testArray = {"A string", 3.14159, true}print(testArray)
Dizilerden okuma
Bir dizeden okumak için, referansından sonra bir çift kare parantez ekleyin ve içindeki elemanın indeks numarasını belirtin ( [pos] ):
-- Üç öğe ile bir dizi oluşturlocal testArray = {"A string", 3.14159, true}print(testArray[1]) -- Bir dizeprint(testArray[2]) -- 3.14159print(testArray[3]) -- true
Dizilere yaz
Bir indekste bir dizi değerini tanımlamak veya yeniden yazmak için, indeks numarasını kare parantezlerle ( [index] ) takip eden = ve değer:
local testArray = {"A string", 3.14159, true}testArray[2] = 12345testArray[4] = "New string"print(testArray[2]) --12345print(testArray[4]) -- New string
Diziler üzerinde döngü geçirme Iterate over arrays
Bir dizi üzerinde döngü yapmak için, bir for döngüsü kullanabilirsiniz.Diziler sayısal indekslere sahip olduğundan, dizi uzunluğuna kadar bir sayısal döngüsü de kullanabilirsiniz ( ).
local testArray = {"A string", 3.14159, true, "New string"}-- Genel döngü kullanarak döngü oluşturmafor index, value in testArray doprint(index, value)end-- Dizin uzunluğu işlecisi kullanarak döngü yap (#)for index = 1, #testArray doprint(index, testArray[index])end
Eşyaları ekleyin
Bir öğeyi bir dize sonuna eklemek için iki yerleşik yol vardır:
- Dizinin ve öğe değerinin bir referansını Luau'nun table.insert() işlevine geçirin.
- Yeni öğeyi array[#array+1] söntaxını kullanarak dizine ekleyin.
local testArray = {"A string", 3.14159}table.insert(testArray, "New string")testArray[#testArray+1] = "Another new string"print(testArray[3]) -- Yeni dizeprint(testArray[4]) -- Another new string
Bir dizi arasındaki bir öğeyi başlangıç ve bitiş arasına eklemek için, table.insert() 'in ikinci argümanı olarak bir konum değeri dahil edin.Bu, yeni öğeyi girer ve aşağıdaki öğeleri bir indeks pozisyonuna ittirir.
local testArray = {"First item", "Next item"}table.insert(testArray, 2, "NEW ITEM #2")print(testArray[1]) -- İlk öğeprint(testArray[2]) -- Yeni Eşya #2print(testArray[3]) -- Next item
Eşyaları kaldır
Bir öğeyi bir dizeden kaldırmak için table.remove() kullanın.Bu, belirtilen pozisyondaki öğeyi kaldırır ve herhangi bir sonraki öğeyi bir indeks pozisyonuna geri 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, dizilere bir uzantıdır. Sözlükler, anahtarların herhangi bir sayı, dize veya nesne olabileceği bir dizi depolar, değerler.
Sözlükler oluştur
Bir sözlük tablosu oluşturmak için, her bir anahtar ı tanımlayın, ardından = ve değer . Her anahtar-değer çiftini virgülle ayırın:
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}
Sözlükler için anahtarlar sayılar, dize ve nesneler olabilir.Örneğin, bir anahtar da bir Instance olabilir.Nesneleri anahtar olarak kullanmak için, anahtarı kare parantezlerle ilan edin ( [key] ):
local part = Instance.new("Part")local testDictionary = {partType = "Block",[part] = true}
Sözlüklerden okuma
Bir sözlükten okumak için, referansından sonra bir çift parantez ekleyin ve anahtar adını belirtin.Doğrudan bir dize anahtarını kullanarak referans verin ( ["key"] ) veya ( .key ), ya da bunun yerine değişken bir değer kullanın ( [key] ).
local part = Instance.new("Part")local testDictionary = {partType = "Block",[part] = true}-- Dize anahtarları için alıntılar dahil etprint(testDictionary["partType"]) -- Bloğu-- Veya boşluklar olmadan dizin anahtarlarını indekslemek için . kullanınprint(testDictionary.partType) -- Bloğu-- Dize olmayan anahtarlar için özellikleri atlaprint(testDictionary[part]) -- true
Sözlüklere yaz
Yeni veya mevcut bir sözlük anahtarının değerini tanımlamak veya yeniden yazmak için, anahtar adını parantezlerde ( ) belirtin veya anahtar bir dize ise ( ) ve değeri kullanın:
local testDictionary = {fruitName = "Lemon",sour = true}-- Mevcut anahtarların değerini değiştirmetestDictionary["fruitName"] = "Cherry"testDictionary.sour = false-- Yeni anahtar-değer çifti ekleyintestDictionary.fruitCount = 10print(testDictionary.fruitName) -- Kirazprint(testDictionary.sour) -- sahteprint(testDictionary.fruitCount) -- 10
Sözlüklere tekrar edin
Bir sözlüğü döngüye sokmak için, bir for döngüsü kullanın:
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}for key, value in testDictionary doprint(key, value)end--[[ Sonuç çıkışı:fruitName Lemonsour truefruitColor Yellow]]
Anahtar-değer çiftlerini kaldır
Bir sözlükten bir anahtar-değer çiftini kaldırmak veya silmek için, değerini bir anahtar için nil olarak ayarlayın.
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}testDictionary.sour = nilfor key, value in testDictionary doprint(key, value)end--[[ Sonuç çıkışı:fruitName LemonfruitColor Yellow]]
Referans olarak tablolar
Yeni bir değişken içine bir tablo saklarsanız, Luau bu tablonun bir kopyasını oluşturmaz.Bunun yerine, değişken orijinal tabloya referans veya işaret olur.Bir tabloya yapılan herhangi bir referans, orijinal tablodaki herhangi bir değişikliği yansıtır:
local originalArray = {10, 20}local arrayReference = originalArrayprint("Original:", originalArray[1], originalArray[2])print("Reference:", arrayReference[1], arrayReference[2])-- Orijinal dize değerlerini değiştir Change values in original arrayoriginalArray[1] = 1000originalArray[2] = 2000print("Reference:", arrayReference[1], arrayReference[2])--[[ Sonuç çıkışı:Original: 10 20Reference: 10 20Reference: 1000 2000]]
Tabloları klonla
Derin olmayan klonlar
İç içe geçmiş tablolara sahip olmadan bir tabloyu kopyalamak için, Luau table.clone() yöntemini sunar.
local original = {key = "value",engine = "Roblox",playerID = 505306092}local clone = table.clone(original)
Derin klonlar
İçinde çember içeren daha karmaşık bir tabloyu kopyalamak için, aşağıdakine benzer bir recursive işlev kullanmanız gerekecektir:
-- Bir tabloyu derin olarak klonlamak için kullanılan işlev
local function deepClone(original)
-- Kopya için yeni tabloyu tanımla
local clone = table.clone(original)
-- Tablo değerlerini kontrol etmek için orijinal tabloyu dolaşın
-- Bir tablo bir değer olarak bulunduysa, anahtara (index) derin kopyalayın
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- Derin klonlanmış tablonun son kopyasını döndür
return clone
end
İşlev yerinde olduğundan, şu şekilde derin bir kopya oluşturabilirsiniz:
local original = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepClone(original)
Tabloları dondurma
Bir tabloyu dondurmak onu okunur olarak yapar, ki bu değiştirmek istemediğiniz sabit değerler oluşturmak için yararlıdır.Donma kalıcıdır; "çözme" veya "eritme" yöntemi yoktur.Bir tablonun donup donmadığını kontrol etmek için, table.isfrozen() kullanın.
Derin dondurma
İç içe geçmiş tablolara sahip olmadan bir tabloyu dondurmak için, Luau table.freeze() yöntemini sunar.
local target = {key = "value",engine = "Roblox",playerID = 505306092}table.freeze(target)target.playerID = 1 --> attempt to modify a readonly table
Derin dondurma
İçinde yer alan karmaşık bir tabloyu dondurmak için, aşağıdakine benzer bir recursive işlev kullanın:
local function deepFreeze(target)
-- Tabloyu yüzeysel dondurun
table.freeze(target)
-- Tablonun her anahtarını kontrol edin ve bir tabloysa dondurun
for _, value in target do
-- Değerin dondurulmadığından emin olun; eğer zaten öyleyse, bir hata oluşur
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(v)
end
end
end
İşlev yerinde olduğundan, bir tabloyu aşağıdaki gibi 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