Menu
CoddyTech

Menyalin Dictionary

Termasuk bagian Logika dan Alur dalam perjalanan GDScript di Coddy. Pelajaran 22 dari 78.

Menetapkan dictionary ke variabel lain tidak menyalinnya. Kedua variabel merujuk ke dictionary yang sama, jadi perubahan melalui salah satunya terlihat melalui variabel lainnya:

var template := {"type": "slime", "hp": 30}
var enemy := template
enemy["hp"] = 10
print(template["hp"]) # 10

duplicate() membuat dictionary baru dengan pasangan yang sama. Mengubah salinannya tidak mengubah yang asli:

var original := {"type": "slime", "hp": 30}
var copy := original.duplicate()
copy["hp"] = 99
print(original["hp"]) # 30

duplicate() membuat salinan dangkal: salinan tersebut memiliki pasangan sendiri, tetapi nilai yang berupa array atau dictionary tetap digunakan bersama oleh keduanya:

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"] }

Berikan true untuk salinan mendalam: duplicate(true) juga menyalin setiap array dan dictionary di dalamnya, sehingga keduanya tidak berbagi apa pun:

var twin := hero.duplicate(true)
twin["stats"]["hp"] = 50
print(hero["stats"]["hp"]) # 1

Salinan dangkal sudah cukup jika setiap nilai berupa angka, string, atau boolean. Begitu suatu nilai berupa array atau dictionary, gunakan duplicate(true). Array bekerja dengan cara yang sama: grid.duplicate(true) menyalin array 2D beserta baris-barisnya.

challenge icon

Tantangan

Mudah

Munculkan satu gelombang musuh dari template. Dictionary template diberikan. Program membaca dua bilangan bulat, satu per baris: jumlah musuh yang akan dimunculkan (n) dan bonus hp.

Untuk setiap nomor musuh i dari 1 hingga n:

  1. Buat salinan template yang tidak berbagi apa pun dengannya.
  2. Tambahkan kunci "id" dengan nilai i.
  3. Tambahkan bonus * i ke "hp" di dalam "stats".
  4. Jika ini musuh terakhir, tambahkan "crown" ke "loot"-nya.
  5. Cetak musuh tersebut.

Terakhir, cetak Template: diikuti oleh template, yang harus tetap tidak berubah. Untuk input 2 dan 10, output-nya adalah:

{ "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"] }

Coba sendiri

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())

	# Buat dan cetak n musuh

	# Cetak template
	pass
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler GDScript online