Tablolar

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

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ştur
local 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ştur
local 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ştur
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray[1]) -- Bir dizi
print(testArray[2]) -- 3.14159
print(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] = 12345
testArray[4] = "New string"
print(testArray[2]) --12345
print(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 do
print(index, value)
end
-- Matrix uzunluğu operatörü (#) kullanılarak itere edin
for index = 1, #testArray do
print(index, testArray[index])
end
--[[ Sonuç çıkışı:
1 A string
2 3.14159
3 Camera
4 New string
1 A string
2 3.14159
3 Camera
4 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 dizi
print(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 öğe
print(testArray[2]) -- Yeni Öğe #2
print(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 öğe
print(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çerecek
print(testDictionary["PartType"]) -- Blok
-- String olmayan anahtarlar için alıntıları gizleyin
print(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ştir
testDictionary["FruitName"] = "Cherry"
testDictionary["Sour"] = false
-- Yeni anahtar değeri çiftini girin
testDictionary["FruitCount"] = 10
print(testDictionary["FruitName"]) -- Kiraz
print(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) do
print(key, value)
end
--[[ Sonuç çıkışı:
FruitName Lemon
Sour true
FruitColor 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"] = nil
for key, value in pairs(testDictionary) do
print(key, value)
end
--[[ Sonuç çıkışı:
FruitName Lemon
FruitColor 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 = originalArray
print("Original:", originalArray[1], originalArray[2])
print("Reference:", arrayReference[1], arrayReference[2])
-- Değerleri orijinal matrisinde değiştir
originalArray[1] = 1000
originalArray[2] = 2000
print("Reference:", arrayReference[1], arrayReference[2])
--[[ Sonuç çıkışı:
Original: 10 20
Reference: 10 20
Reference: 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