Penambahan Bersyarat: putIfAbsent
Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 29 dari 65.
Terkadang kamu perlu menambahkan pasangan kunci-nilai ke Map, tetapi hanya jika kunci itu belum ada. Method putIfAbsent() menangani situasi ini dengan tepat dengan menambahkan entri hanya jika kunci tersebut belum ada di map.
Method ini menerima dua parameter: key yang akan diperiksa, dan nilai yang akan ditambahkan jika key tidak ada. Jika key sudah ada, putIfAbsent() tidak melakukan apa pun dan membiarkan nilai yang sudah ada tetap sama. Jika key tidak ada, method ini menambahkan pasangan key-value baru ke map.
Map<String, int> gameScores = {
'Alice': 150,
'Bob': 200
};
// Ini akan menambahkan Charlie karena dia belum ada di map
gameScores.putIfAbsent('Charlie', () => 0);
print(gameScores); // {Alice: 150, Bob: 200, Charlie: 0}
// Ini tidak akan mengubah skor Alice karena dia sudah ada
gameScores.putIfAbsent('Alice', () => 0);
print(gameScores); // {Alice: 150, Bob: 200, Charlie: 0}method putIfAbsent() sangat berguna untuk menginisialisasi nilai default, seperti menyiapkan akun pengguna baru atau memastikan key tertentu tersedia sebelum melakukan operasi padanya. Ini cara yang aman untuk menambahkan data tanpa tanpa sengaja menimpa informasi yang sudah ada.
Tantangan
MudahBuat program yang mengelola sistem pendaftaran turnamen game dengan melacak skor pemain dan memastikan semua pemain memiliki nilai awal default. Programmu harus:
- Membaca input string yang mewakili nama turnamen
- Membaca beberapa pasang input yang mewakili nama pemain dan skor mereka saat ini (input akan berakhir saat kamu menerima
"scores_done") - Membaca beberapa input string yang mewakili pemain baru yang ingin bergabung dengan turnamen (input akan berakhir saat kamu menerima
"players_done") - Membuat Map untuk menyimpan nama pemain sebagai kunci dan skor mereka sebagai nilai
- Menggunakan method
putIfAbsent()untuk menambahkan setiap pemain baru dengan skor default 0, tetapi hanya jika mereka belum terdaftar - Menghitung statistik turnamen dan mencetak laporan pendaftaran dengan format persis seperti yang ditunjukkan di bawah
Misalnya, jika nama turnamennya adalah "Spring Championship", skor yang sudah ada mencakup "Alice" dengan skor 150, "Bob" dengan skor 200, "Charlie" dengan skor 75, dan pemain barunya adalah "Diana", "Alice", "Eve", programmu harus menghasilkan output:
Tournament: Spring Championship
Initial Scores: {Alice: 150, Bob: 200, Charlie: 75}
Registration Process:
Adding Diana: New player registered with score 0
Adding Alice: Player already exists, keeping score 150
Adding Eve: New player registered with score 0
Final Scores: {Alice: 150, Bob: 200, Charlie: 75, Diana: 0, Eve: 0}
Tournament Statistics:
Total registered players: 5
Players with scores above 0: 3
New players added: 2
Average score: 85.0
Status: Registration completed successfullyJika nama turnamennya adalah "Winter Cup", skor yang sudah ada mencakup "John" dengan skor 300, "Mary" dengan skor 250, dan pemain barunya adalah "Sarah", "Tom", "John", programmu harus menghasilkan output:
Tournament: Winter Cup
Initial Scores: {John: 300, Mary: 250}
Registration Process:
Adding Sarah: New player registered with score 0
Adding Tom: New player registered with score 0
Adding John: Player already exists, keeping score 300
Final Scores: {John: 300, Mary: 250, Sarah: 0, Tom: 0}
Tournament Statistics:
Total registered players: 4
Players with scores above 0: 2
New players added: 2
Average score: 137.5
Status: Registration completed successfullyJika nama turnamennya adalah "Summer League", skor yang sudah ada mencakup "Alex" dengan skor 180, "Jordan" dengan skor 220, "Taylor" dengan skor 160, "Morgan" dengan skor 190, dan pemain barunya adalah "Casey", "Riley", programmu harus menghasilkan output:
Tournament: Summer League
Initial Scores: {Alex: 180, Jordan: 220, Taylor: 160, Morgan: 190}
Registration Process:
Adding Casey: New player registered with score 0
Adding Riley: New player registered with score 0
Final Scores: {Alex: 180, Jordan: 220, Taylor: 160, Morgan: 190, Casey: 0, Riley: 0}
Tournament Statistics:
Total registered players: 6
Players with scores above 0: 4
New players added: 2
Average score: 158.33333333333334
Status: Registration completed successfullyProgrammu harus menggunakan method putIfAbsent() untuk menambahkan pemain baru dengan skor default 0, serta memastikan pemain yang sudah terdaftar tetap memiliki skor saat ini. Hitung rata-rata skor dengan membagi total semua skor dengan jumlah pemain. Hitung jumlah pemain yang memiliki skor di atas 0 dan jumlah pemain baru yang benar-benar ditambahkan, tidak termasuk pemain yang sudah terdaftar. Format input adalah: nama turnamen, lalu nama pemain dan skor secara bergantian (sebagai string yang perlu dikonversi menjadi bilangan bulat), diakhiri dengan "scores_done", kemudian nama-nama pemain baru yang diakhiri dengan "players_done".
Coba sendiri
import 'dart:io';
void main() {
// Baca nama turnamen
String? tournamentName = stdin.readLineSync();
// Buat map untuk menyimpan skor pemain
Map<String, int> playerScores = {};
// Baca skor pemain yang sudah ada
while (true) {
String? input = stdin.readLineSync();
if (input == "scores_done") break;
String playerName = input!;
String? scoreInput = stdin.readLineSync();
int score = int.parse(scoreInput!);
playerScores[playerName] = score;
}
// Simpan skor awal untuk ditampilkan
Map<String, int> initialScores = Map.from(playerScores);
// Baca pemain baru yang akan didaftarkan
List<String> newPlayers = [];
while (true) {
String? input = stdin.readLineSync();
if (input == "players_done") break;
newPlayers.add(input!);
}
// TODO: Tulis kodemu di bawah ini
// Gunakan method putIfAbsent() untuk menambahkan pemain baru dengan skor awal 0
// Lacak proses pendaftaran dan hitung statistik
// Cetak laporan pendaftaran turnamen
print("Tournament: $tournamentName");
print("Initial Scores: $initialScores");
print("Registration Process:");
// Cetak detail proses pendaftaran di sini
print("Final Scores: $playerScores");
print("Tournament Statistics:");
// Cetak statistik di sini
print("Status: Registration completed successfully");
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Manipulasi list Tingkat Lanjut
Properti list: first dan lastStatus list: isEmpty dan isNotEmpMembalikkan listMenambahkan ke list: insertMenghapus dari list: removeWhereMencari dalam list: indexOfMengurutkan listMengacak listRekap: Pengatur list4Manipulasi Map Lanjutan
Melakukan perulangan pada MapMemeriksa kunci dan nilaiProperti Map: kunci dan nilaiPenambahan Bersyarat: putIfAbsentMenghapus Entri dari MapMap BersarangRingkasan: Pembaruan Inventaris2Operasi Fungsional pada list
Mengubah dengan 'map'Menyaring dengan 'where'Menggunakan '.toList()'Memeriksa Kondisi dengan 'any'Kondisi dengan 'every'Menemukan dengan 'firstWhere'Ulasan: Penyaringan Data5Proyek: Perhitungan Keranjang Belanja
Menyiapkan ProyekMenambahkan Barang ke Keranjang3set
Apa itu set?Membuat setMenambahkan dan menghapus elemen dari setMemeriksa elemen dalam setMengubah list menjadi setGabungan setIrisan setSelisih setRangkuman: Daftar tamu unikLatihan sendiri: Compiler Dart online