Menu
CoddyTech

Sözlükleri Birleştirme

Coddy'nin GDScript Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 21 / 78.

merge(), başka bir sözlüğün tüm çiftlerini, üzerinde çağrıldığı sözlüğe ekler. Yalnızca diğer sözlükte bulunan anahtarlar sona eklenir:

var settings := {"volume": 5, "difficulty": "normal"}
var saved := {"difficulty": "hard", "subtitles": true}
settings.merge(saved)
print(settings)
{ "volume": 5, "difficulty": "normal", "subtitles": true }

"difficulty" her iki sözlükte de bulunuyor ve merge(), settings içinde zaten bulunan değeri korudu: varsayılan olarak mevcut anahtarların üzerine yazılmaz. Diğer sözlüğün kazanması için ikinci bağımsız değişken olarak true iletin:

var options := {"volume": 5, "difficulty": "normal"}
options.merge(saved, true)
print(options["difficulty"]) # hard

merge() sözlüğün kendisini değiştirir ve hiçbir şey döndürmez; bu yüzden var result := a.merge(b) bir hatadır. Her iki sözlüğü de olduğu gibi korumak için merged() kullanın. Aynı bağımsız değişkenleri alır ve yeni bir sözlük döndürür:

var defaults := {"volume": 5, "difficulty": "normal"}
var choice := {"difficulty": "hard"}
var final_settings := defaults.merged(choice, true)
print(final_settings) # { "volume": 5, "difficulty": "hard" }
print(defaults) # { "volume": 5, "difficulty": "normal" }

Bir anahtar her iki sözlükte de varsa ve değerleri birleştirmek, örneğin iki miktarı toplamak istiyorsan, döngüyü kendin yaz:

var bag := {"gold": 10, "gems": 1}
var loot := {"gold": 5, "keys": 2}
for key in loot:
	bag[key] = bag.get(key, 0) + loot[key]
print(bag) # { "gold": 15, "gems": 1, "keys": 2 }
challenge icon

Görev

Kolay

Bir oyun güncellemesi yeni ayarlar ekledi. Oyuncunun kaydedilmiş ayarları, virgülle ayrılmış key=value çiftleri olarak tek satırlık girdiden okunur (satır boş olabilir). Verilen kod bunları saved sözlüğünde saklar.

Kaydetme dosyasında eksik olan ayarları tamamla: Anahtarı henüz içinde bulunmayan her defaults çiftini, oyuncunun seçtiği değerleri ve defaults sözlüğünü değiştirmeden saved sözlüğüne ekle. Ardından saved sözlüğünü yazdır ve sonraki satırda defaults sözlüğünü yazdır.

difficulty=hard,volume=8 girdisi için çıktı şöyledir:

{ "difficulty": "hard", "volume": "8", "subtitles": "off", "language": "en" }
{ "difficulty": "normal", "volume": "5", "subtitles": "off", "language": "en" }

Kendin dene

extends Node

func _ready():
	var defaults := {"difficulty": "normal", "volume": "5", "subtitles": "off", "language": "en"}
	var saved := {}
	for pair in OS.read_string_from_stdin().split(",", false):
		var parts := pair.split("=")
		saved[parts[0]] = parts[1]

	# Eksik varsayılan değerleri saved sözlüğüne ekle, ardından her iki sözlüğü de yazdır
	pass
quiz iconKendini test et

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

Kendi başına pratik yap: Online GDScript derleyicisi