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 etiketlemek zorunda olduğunuzda 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 yazolabilir.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Parçalara veya diğer nesnelerin anahtarları olarak referans olmak için parantezleri kullanın.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Sözlük oluştur
Sözlüklere 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 adlı 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}anahtarbir düşman adı atayın, ardından virgül.
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 yazkullanmalıdır, ancak değerler kullanmak zorunda değildir.
local enemy = {Name = "Spike",Health = 1000,}
Dizin değerlerini kullan
Sözlük değerlere 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ştir
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)Oynatma ve Çıktı penceresini kontrol edin.
Anahtar olarak önceden var olan değişkenler
Sözlükler, bir senaryonun diğer bölümlerinde ilan edilen önceden var olan değişkenlerle etkileşime girebilir.Aşağıdaki kod örneği, bir oyuncunun adını anahtar olarak eklemek için bir değişken kullanır ve ardından deneyime katıldıklarında noktalarının değerini 0 olarak 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)endanahtarolarak name``playerPoints sözlüğe 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 kullanmaya ilişkin bazı zorluklar bulunmaktadır. Bunlar için kodu oluşturup oluşturamayacağınızı görün.
- Bir oyuncuya zamanla hasar veren bir tuzağı parçası oluşturun. Bir oyuncu tuzağ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 kelime "elma" "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üldü.
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, takip edilenbası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 yazkullanmalıdır, ancak değerler sorun yokla karışabilir.
Bir sözlüğe erişim şekli, amacı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; tablada 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 gitmelidir, 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 değişen 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.