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"]) # 10duplicate() 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"]) # 30duplicate() 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"]) # 1Salinan 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.
Tantangan
MudahMunculkan 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:
- Buat salinan
templateyang tidak berbagi apa pun dengannya. - Tambahkan kunci
"id"dengan nilaii. - Tambahkan
bonus * ike"hp"di dalam"stats". - Jika ini musuh terakhir, tambahkan
"crown"ke"loot"-nya. - 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
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami String
Method untuk StringMencari dalam StringMengganti dan Menghapus SpasiMemisahkan dan MenggabungkanUlasan: Memeriksa Nama Pengguna4Dictionary Bagian 2
Dictionary BersarangArray berisi DictionaryMenggabungkan DictionaryMenyalin DictionaryRangkuman: Penghitung Frekuensi10Fungsi Lanjutan
Mengembalikan Beberapa NilaiFungsi Lambda Bagian 1Fungsi Lambda Bagian 2Ringkasan: Mengurutkan dengan LambdaFungsi Rekursif Bagian 1Fungsi Rekursif Bagian 2Ringkasan: Menjumlahkan array Bersarang13Sistem Manajemen Inventaris
Ikhtisar ProyekTambahkan Barang2Pengambilan Keputusan Lanjutan
Pencocokan dengan VariabelGuard pada MatchPola arrayPola dictionaryPemeriksaan KeanggotaanUlasan: Parser Perintah5Aplikasi Buku Kontak
Tampilkan MenuTambah Kontak8Pengelola Data Siswa
Gambaran Umum ProyekTambah Siswa11Fungsi Tingkat Tinggi
Method mapMethod filterMethod reduceany dan allUlasan: Validator EmailUlasan: Pemroses Angka3Array Multidimensi
Dasar-Dasar Array 2DMengakses Elemen Array 2DNested Loop dengan Array 2DRangkuman: Array 2DArray Tidak BeraturanPola Umum Array 2DRangkuman: Papan Permainan6Set dengan Dictionary
Apa Itu Set?Dictionary sebagai SetMenambahkan dan MenghapusUnion dan IntersectionSelisih SetRangkuman: Menghapus DuplikatLatihan sendiri: Compiler GDScript online