Sözlükleri Kopyalama
Coddy'nin GDScript Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 22 / 78.
Bir sözlüğü başka bir değişkene atamak onu kopyalamaz. Her iki değişken de aynı sözlüğü gösterir; bu nedenle birindeki değişiklik diğerinde de görünür:
var template := {"type": "slime", "hp": 30}
var enemy := template
enemy["hp"] = 10
print(template["hp"]) # 10duplicate() aynı çiftlere sahip yeni bir sözlük oluşturur. Kopyayı değiştirmek özgün sözlüğü etkilemez:
var original := {"type": "slime", "hp": 30}
var copy := original.duplicate()
copy["hp"] = 99
print(original["hp"]) # 30duplicate() bir sığ kopya oluşturur: kopyanın kendine ait çiftleri vardır, ancak dizi veya sözlük olan bir değer iki kopya arasında paylaşılmaya devam eder:
var hero := {"stats": {"hp": 100}, "items": ["sword"]}
var clone := hero.duplicate()
clone["stats"]["hp"] = 1
clone["items"].append("shield")
print(hero){ "stats": { "hp": 1 }, "items": ["sword", "shield"] }Derin kopya için true değerini geçir: duplicate(true), içindeki her diziyi ve sözlüğü de kopyalar; böylece ikisi hiçbir şeyi paylaşmaz:
var twin := hero.duplicate(true)
twin["stats"]["hp"] = 50
print(hero["stats"]["hp"]) # 1Her değer bir sayı, dize veya boole değeri olduğunda sığ bir kopya yeterlidir. Bir değer dizi veya sözlük olduğu anda duplicate(true) kullanın. Diziler de aynı şekilde çalışır: grid.duplicate(true), 2B bir diziyi satırlarıyla birlikte kopyalar.
Görev
KolayBir şablondan bir düşman dalgası oluştur. template sözlüğü verilmiştir. Program, her satırda bir tane olacak şekilde iki tam sayı okur: oluşturulacak düşman sayısı (n) ve bir hp bonusu.
1 ile n arasındaki her i numaralı düşman için:
template'in onunla hiçbir şeyi paylaşmayan bir kopyasını oluştur.ideğeriyle"id"anahtarını ekle."stats"içindeki"hp"değerinebonus * iekle.- Son düşmansa,
"loot"listesine"crown"ekle. - Düşmanı yazdır.
Son olarak, şablonun değişmeden kalması gereken hâlini, önüne Template: ekleyerek yazdır. 2 ve 10 girdileri için çıktı şöyledir:
{ "type": "slime", "stats": { "hp": 40, "speed": 2 }, "loot": ["gel"], "id": 1 }
{ "type": "slime", "stats": { "hp": 50, "speed": 2 }, "loot": ["gel", "crown"], "id": 2 }
Template: { "type": "slime", "stats": { "hp": 30, "speed": 2 }, "loot": ["gel"] }Kendin dene
extends Node
func _ready():
var template := {"type": "slime", "stats": {"hp": 30, "speed": 2}, "loot": ["gel"]}
var n := int(OS.read_string_from_stdin())
var bonus := int(OS.read_string_from_stdin())
# n düşmanı oluştur ve yazdır
# Şablonu yazdır
pass
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1String’leri Derinlemesine İnceleme
String MetotlarıString’lerde AramaDeğiştirme ve KırpmaBölme ve BirleştirmeTekrar: Kullanıcı Adı Kontrolü4Sözlükler Bölüm 2
İç İçe SözlüklerSözlük DizileriSözlükleri BirleştirmeSözlükleri KopyalamaTekrar - Frekans Sayacı10İleri Düzey Fonksiyonlar
Birden Fazla Değer DöndürmeLambda Fonksiyonları Bölüm 1Lambda Fonksiyonları Bölüm 2Tekrar - Lambda ile SıralamaÖzyinelemeli Fonksiyonlar Bölüm 1Özyinelemeli Fonksiyonlar Bölüm 2Tekrar - İç İçe Dizilerin Toplamı13Envanter Yönetim Sistemi
Projeye Genel BakışÜrün Ekle2İleri Düzey Karar Verme
Değişkenlerle EşleştirmeEşleştirme KoşullarıDizi KalıplarıSözlük KalıplarıÜyelik KontrolleriÖzet - Komut Ayrıştırıcı5Rehber Uygulaması
Menüyü GörüntüleKişi Ekle8Öğrenci Kayıt Yöneticisi
Proje Genel BakışıÖğrenci Ekle11Üst Düzey Fonksiyonlar
map Metodufilter Metodureduce Metoduany ve allTekrar - E-posta DoğrulayıcıTekrar - Sayı İşleyici3Çok Boyutlu Diziler
2B Dizilere Giriş2B Dizi Elemanlarına Erişim2B Dizilerle İç İçe DöngülerTekrar - 2B DizilerDüzensiz DizilerYaygın 2B Dizi ÖrüntüleriTekrar - Oyun Tahtası6Sözlüklerle Kümeler
Küme Nedir?Küme Olarak SözlükEkleme ve SilmeBirleşim ve KesişimKüme FarkıTekrar: Yinelenenleri Silme9Gelişmiş Veri Toplama
Değerleri ToplamaEn Küçük ve En Büyük Değeri BulmaÖzel SıralamaÖzet - Sözlük SıralayıcıKendi başına pratik yap: Online GDScript derleyicisi