Tablo veri tipi, nil olmayan herhangi bir türde birden fazla değeri depolayabilir. Bu, boole ifadelerini, sayılara, metinlere, fonksiyonlara ve diğer tablolara dahildir. Tabloları süslü parantezlerle ({}) oluşturun:
-- "t" değişkenine atanmış boş bir tablo oluşturunlocal t = {}print(t) -- {}
Bir tabloyu bir dizi veya sözlük olarak kullanabilirsiniz. Diziler, indeks olarak sıralı bir sayı listesi kullanırken, sözlükler, indeks olarak sayılar, metinler ve nesneler içerebilir.
Tablolar üzerinde çalışmak için yerleşik fonksiyonlar hakkında daha fazla bilgi için table kütüphanesine bakın.
Diziler
Bir dizi, değerler için sıralı bir listedir. Diziler, özel izinlere sahip oyuncular grubu gibi veri koleksiyonlarını saklamak için kullanışlıdır.
Diziler oluşturma
Bir Luau tablosu kullanarak bir dizi oluşturmak için, değerleri sırayla, virgüllerle ayırarak tanımlayın.
-- Üç öğeden oluşan bir dizi oluşturunlocal testArray = {"Bir metin", 3.14159, true}print(testArray)
Dizilerden okuma
Bir diziden okumak için, referansın ardından bir çift köşeli parantez ekleyin ve içerisindeki elementin indeks numarasını belirtin ([pos]):
-- Üç öğeden oluşan bir dizi oluşturunlocal testArray = {"Bir metin", 3.14159, true}print(testArray[1]) -- Bir metinprint(testArray[2]) -- 3.14159print(testArray[3]) -- true
Dizilere yazma
Bir dizinin bir indeksindeki değeri tanımlamak veya yeniden yazmak için, köşeli parantezlerde ([index]) indeks numarasını belirtin, ardından = ve değeri ekleyin:
local testArray = {"Bir metin", 3.14159, true}testArray[2] = 12345testArray[4] = "Yeni metin"print(testArray[2]) -- 12345print(testArray[4]) -- Yeni metin
Dizileri döngüye alma
Bir diziyi döngüye almak için, bir for döngüsü kullanabilirsiniz. Dizilerin sayısal indeksleri olduğu için, dizinin uzunluğu üzerinden (#array) sayısal bir for döngüsü de kullanabilirsiniz.
local testArray = {"Bir metin", 3.14159, true, "Yeni metin"}-- Genel döngü kullanmafor index, value in testArray doprint(index, value)end-- Dizi uzunluk operatörü ile döngüfor index = 1, #testArray doprint(index, testArray[index])end
Öğeleri ekleme
Bir diziye sonuna bir öğe eklemek için iki yerleşik yol vardır:
- Diziye bir referans ve öğe değerini Luau'nun table.insert() fonksiyonuna geçirin.
- array[#array + 1] sözdizimini kullanarak yeni öğeyi diziye ekleyin.
local testArray = {"Bir metin", 3.14159}table.insert(testArray, "Yeni metin")testArray[#testArray + 1] = "Başka bir yeni metin"print(testArray[3]) -- Yeni metinprint(testArray[4]) -- Başka bir yeni metin
Bir öğeyi dizinin başlangıcı ve sonu arasına eklemek için, ikinci argüman olarak table.insert() fonksiyonuna bir konum değeri ekleyin. Bu, yeni öğeyi ekler ve aşağıdaki öğeleri bir indeks konumunu yukarı iter.
local testArray = {"İlk öğe", "Sonraki öğe"}table.insert(testArray, 2, "YENİ ÖĞE #2")print(testArray[1]) -- İlk öğeprint(testArray[2]) -- YENİ ÖĞE #2print(testArray[3]) -- Sonraki öğe
Öğeleri kaldırma
Bir diziden bir öğeyi kaldırmak için, table.remove() kullanın. Bu, belirtilen konumdaki öğeyi kaldırır ve sonraki öğeleri bir indeks konumunu geriye iter.
local testArray = {"İlk öğe", "Sonraki öğe", "Son öğe"}table.remove(testArray, 2)print(testArray[1]) -- İlk öğeprint(testArray[2]) -- Son öğe
Sözlükler
Sözlükler dizilerin bir uzantısıdır. Sözlükler, anahtar-değer çiftlerini saklar; burada anahtarlar herhangi bir sayı, metin veya nesne olabilir.
Sözlükler oluşturma
Bir sözlük tablosu oluşturmak için, her anahtarı = ve değer ile takip edin. Her anahtar-değer çiftini virgülle ayırın:
local testDictionary = {fruitName = "Limon",fruitColor = "Sarı",sour = true}
Sözlükler için anahtarlar sayılar, metinler ve nesneler olabilir. Örneğin, bir anahtar ayrıca bir Instance olabilir. Nesneleri anahtar olarak kullanmak için, anahtarı köşeli parantezlerde ([key]) tanımlayın:
local part = Instance.new("Part")local testDictionary = {partType = "Blok",[part] = true}
Sözlüklerden okuma
Bir sözlükten okumak için, referansın ardından bir çift parantez ekleyin ve anahtar adını belirtin. Bir metin anahtarını doğrudan herhangi biriyle referanslayın (["key"]) ya da (.key), veya bir değişken değeri kullanın ([key]).
local part = Instance.new("Part")local testDictionary = {partType = "Blok",[part] = true}-- Metin anahtarları için alıntı ekleyinprint(testDictionary["partType"]) -- Blok-- Alternatif olarak, boşluk olmayan metin anahtarlarını indekslemek için . kullanınprint(testDictionary.partType) -- Blok-- Metin olmayan anahtarlar için alıntıları atlayınprint(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 adını köşeli parantezlerde ([key]) veya anahtar bir metinse (.key) kullanarak ardından = ve değeri belirtin:
local testDictionary = {fruitName = "Limon",sour = true}-- Mevcut anahtarların değerlerini değiştirmetestDictionary["fruitName"] = "Kiraz"testDictionary.sour = false-- Yeni anahtar-değer çifti eklemetestDictionary.fruitCount = 10print(testDictionary.fruitName) -- Kirazprint(testDictionary.sour) -- falseprint(testDictionary.fruitCount) -- 10
Sözlükleri döngüye alma
Bir sözlüğü döngüye almak için, bir for döngüsü kullanın:
local testDictionary = {fruitName = "Limon",fruitColor = "Sarı",sour = true}for key, value in testDictionary doprint(key, value)end--[[ Sonuç çıktısı:fruitName Limonsour truefruitColor Sarı]]
Anahtar-değer çiftlerini kaldırma
Bir sözlükten bir anahtar-değer çiftini kaldırmak veya silmek için, anahtar için değerini nil olarak ayarlayın.
local testDictionary = {fruitName = "Limon",fruitColor = "Sarı",sour = true}testDictionary.sour = nilfor key, value in testDictionary doprint(key, value)end--[[ Sonuç çıktısı:fruitName LimonfruitColor Sarı]]
Tablo referansları
Eğer bir tabloyu yeni bir değişkende saklarsanız, Luau bu tablonun bir kopyasını oluşturmaz. Bunun yerine, değişken, orijinal tablonun bir referansı veya işaretçisi haline gelir. Bir tabloya yapılan her referans, orijinal tablodaki değişiklikleri yansıtır:
local originalArray = {10, 20}local arrayReference = originalArrayprint("Orijinal:", originalArray[1], originalArray[2])print("Referans:", arrayReference[1], arrayReference[2])-- Orijinal dizideki değerleri değiştirinoriginalArray[1] = 1000originalArray[2] = 2000print("Referans:", arrayReference[1], arrayReference[2])--[[ Sonuç çıktısı:Orijinal: 10 20Referans: 10 20Referans: 1000 2000]]
Tabloları klonlama
Yüzeysel klonlar
Bir tabloyu iç içe tablolar olmadan kopyalamak için, Luau table.clone() yöntemini sunar.
local original = {key = "değer",engine = "Roblox",playerID = 505306092}local clone = table.clone(original)
Derin klonlar
İç içe tablolar içeren daha karmaşık bir tabloyu kopyalamak için, aşağıda benzer bir özyinelemeli işlev kullanmanız gerekir:
-- Bir tablonun derin klonlaması için kullanılan işlev
local function deepClone(original)
-- Kopya için yeni tabloyu tanımlayın
local clone = table.clone(original)
-- Orijinal tabloyu kontrol etmek için döngü
-- Değer olarak bir tablo bulunduğunda, bunu anahtara (indeks) derin klonlayın
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- Derin klonlama sonucunda tamamlanmış kopyayı döndür
return clone
end
İşlev ayarlandığında, aşağıdaki gibi bir derin kopya oluşturabilirsiniz:
local original = {key = "değer",playerInfo = {playerID = 505306092,playerName = "OyuncuAdı"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepClone(original)
Tabloları dondurma
Bir tabloyu dondurmak, onu salt okunur hale getirir; bu, değiştirmek istemediğiniz sabit değerler oluşturmak için yararlıdır. Dondurma kalıcıdır; "dondurmayı çözme" veya "çözme" yöntemi yoktur. Bir tablonun donmuş olup olmadığını kontrol etmek için table.isfrozen() kullanın.
Yüzeysel dondurmalar
İç içe tablolar olmadan bir tabloyu dondurmak için Luau table.freeze() yöntemini sunar.
local target = {key = "değer",engine = "Roblox",playerID = 505306092}table.freeze(target)target.playerID = 1 --> salt okunur tabloyu değiştirme girişimi
Derin dondurmalar
İç içe tablolar içeren daha karmaşık bir tabloyu dondurmak için, aşağıda benzer bir özyinelemeli 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 dondurulmuşsa, bir hata oluşur
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(value)
end
end
end
İşlev ayarlandığında, bir tabloyu aşağıdaki gibi derin dondurabilirsiniz:
local target = {key = "değer",playerInfo = {playerID = 505306092,playerName = "OyuncuAdı"},otherInfo = {{{1, 3, 5, 7, 9}}}}deepFreeze(target)target.playerInfo.playerID = 1 --> salt okunur tabloyu değiştirme girişimi