Sözlükler, isimleri veya anahtarları bir indeks yerine bir değerle ilişkilendiren tablolardır.
Örnek:
Luau sözlük yapısı
local pet = {Name = "Bobbie",Type = "Dog",}
Değerleri etiketlemeniz gerektiğinde sözlükleri kullanın, sadece bir dizi gibi sıralamak değil.Bir oyuncuyla ilişkili değerleri manipüle ederek bu eğitimde sözlükleri kullanma pratiğini uygulayın.
Sözlük sözdizimi
Diziler, kıvrımlı parantezlerle bir değişkene atanır gibi, sözlükler de {} kıvrımlı parantezlerle bir değişkene atanır. Anahtar-değer çiftleri virgülle ayrılmış ayrı satırlara depolanır.Anahtarlar ve değerler, dize, sayı ve değişken isimleri dahil olmak üzere herhangi bir veri türü olabilir.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Parçaları veya diğer nesneleri anahtar olarak referans olarak kullanmak için parantezleri kullan.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Sözlük oluşturun
Sözlüklerin günlük bir kullanımı, oyuncu veya karakter bilgilerini düzenlemektir.Bu adımlar, teorik bir düşman karakterinin bilgilerinin nasıl depolanabileceğini ve erişilebileceğini araştırır.
Yeni bir senaryoda, enemy adında bir sözlük oluşturun.
local enemy = {}Sözlükteki ilk anahtar, düşmanın adını bir değişken olan Name ile izleyecektir.
local enemy = {Name}Anahtara bir düşman adı atayın, bunu virgülle takip edin.
local enemy = {Name = "Spike",}Düşmanın sahip olması gereken sağlık miktarı için ikinci bir anahtar-değer çifti ekleyin. Unutmayın, anahtarlar daima aynı veri türünü kullanmalıdır, ancak değerler kullanmak zorunda değildir.
local enemy = {Name = "Spike",Health = 1000,}
Dizin değerlerini kullan
Sözlük değerlerine erişmenin iki yolu vardır:
- tableName["keyName"] (önemli, alıntıları not edin)
- tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
Kullanılacak tarz genellikle masanın amacına bağlıdır.Bir sunucudaki oyuncu listesi gibi bir koleksiyon değeri tutan tablolar için, kodlamacılar genellikle tableName["keyName"] kullanacaktır.Bir nesneyi tanımlamak için kullanılan bir sözlük için, kodlayıcılar tableName.keyName kullanma olasılığı daha yüksektir.
Sözlük değerini değiştirin
Bir anahtarın değerini değiştirmek diğer herhangi bir değişkenle aynıdır; eşit = operatörünü kullanın.
enemy tablosunun altında, düşmanın adını başka bir şeye ayarlayın.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)Çıktı penceresini test edin ve kontrol edin.
Önceden var olan değişkenler anahtar olarak
Sözlükler, bir senaryonun diğer bölümlerinde belirtilen önceden var olan değişkenlerle etkileşime girebilir.Aşağıdaki kod örneği, bir oyuncunun adını deneyime katıldığında bir anahtar olarak eklemek için bir değişken kullanır ve ardından puan değerini 0'a ayarlar.
In ServerScriptService , oyuncu noktaları adlı yeni bir senaryo oluşturun.Senaryoda, Oyuncu Hizmetini alın ve playerPoints adlı boş bir sözlük oluşturun.
local Players = game:GetService("Players")local playerPoints = {}Yeni bir oyuncu değişkeni için bir parametre ile yerel bir işlev kodlayın. İşlevi Players.PlayerAdded etkinliğine bağlayın.
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)Fonksiyonda, oyuncunun Name 'ini almak için bir değişken ekleyin, her Oyuncu nesnesinde bir özellik ve test için bir yazdırma ifadesi.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endAnahtar olarak name``playerPoints sözlüğüne girin ve değeri, oyuncunun puanlarını 0'a ayarlayın.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0endOyuncunun adını yazmak için name ve değişkenle eşleşen anahtarın değerini yazmak için playerPoints[name] kullanın.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0print(name .. " has " .. playerPoints[name] .. " points.")endProjeyi çalıştırın ve çıkıyı gözlemleyin.
Bitmiş senaryo
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("hello " .. name)
playerPoints[name] = 0
print(name .. " has " .. playerPoints[name] .. " points.")
end
Players.PlayerAdded:Connect(setPoints)
Opsiyonel zorluklar
Aşağıda, sözlükleri farklı şekillerde kullanmakla ilgili bazı zorluklar bulunmaktadır. Bunlar için kodu oluşturup oluşturamayacağınızı görün.
- Bir oyuncuya zamanla hasar veren bir tuzak parçası oluşturun. Bir oyuncu tuzlağa dokunduğunda, hasar verin, bekleyin, sonra tekrar hasar görünlerine izin verin.
- Bir sözlüğe erişerek iki oyuncudan hangisinin en fazla puana sahip olduğunu kontrol eden bir işlev oluşturun.
- Bir kodu "gizli" oluşturmak için bir dizeyi başka birine değiştiren bir sistem oluşturan bir şifre oluşturun.Örneğin, harf "A" "G" ile değiştirilebilir veya "elma" kelimesi "Turuncu" ile değiştirilebilir.
Sözlükler ve pairs()
pairs() çoğunlukla sözlüklere dolaşmak için kullanılan bir işlevdir. Aşağıda bir örnek görülür.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() bir sözlük öğesinin anahtarı, değeri veya her ikisiyle çalışmak için kullanılabilirAşağıdaki for döngüsünde, ilk değişken anahtardır.İkinci değişken değerdir.Çalışmak istediğiniz sözlük pairs() 'a geçirilir.
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Kod yürütüldüğünde, aşağıdakiler basılacak:
You have:43 Gold Bricks3 Carrots2 Torches
Özet
Sözlükler, indekslenmiş değerler yerine anahtar-değer çiftlerini kullanan tablolardır.Sözlükler ve diziler, bir değişkene tırtıllı parantezler atayarak benzer şekilde başlar.Girişleri virgüllerle ayrı tutun.
Dizin içindeki tüm anahtarlar aynı veri türünü kullanmalıdır, ancak değerler sorun yokla karışabilir.
Bir sözlüğe erişim şekli onun amaçlarını iletebilir.Düşman özelliklerinin bir sözlüğü muhtemelen nokta işleci ile erişilecek, bir isim listesi ise muhtemelen tableName[keyName] kullanacaktır.
Küçükleri kullanırken dikkatli olun; tabloda oluşturulan anahtar isimleri dize olarak ele alınmalıdır: tableName["keyName"] .Ancak, parçalar gibi nesneler referans edildiğinde, alıntılara ihtiyaç yoktur: tableName[keyName] .
Birçok kod sözlüklere veya düzenlere geçmelidir, ancak bu veri yapılarının başlangıcını ve sonunu her zaman bilmeyebilirsiniz.Örneğin, oyuncu sözlüğü değişebilir veya oyuncuların çeşitli boyutlarda bir dizi envanteri olabilir.
Bu durumlarda, bilinen başlangıç ve bitiş noktaları olmadan her bir elemanı geçmek için pairs() ve ipairs() bir for döngüsünde kullanabilirsiniz.Ayrıca, in anahtar kelimesi aracılığıyla genel döngüyü kullanarak elemanları pairs() veya ipairs() gerekmeden döndürebilirsiniz.