setmapcollectionMenengah5 mnt baca

Set dan Map

Set untuk data unik tanpa duplikat, Map untuk pasangan kunci-nilai seperti kamus.

Set: koleksi tanpa duplikat

Set mirip List, tapi menolak nilai kembar dan tidak punya urutan index:

dart
void main() {
  var angka = <int>{1, 2, 3, 2, 1};
  print(angka); // {1, 2, 3} duplikat otomatis hilang

  angka.add(4);
  angka.add(2); // ditolak diam-diam, tetap {1, 2, 3, 4}
  print(angka.contains(3)); // true
  print(angka.length); // 4
}

Perhatikan kurung kurawalnya: Set pakai {}, List pakai []. Untuk set kosong wajib tulis tipenya (<int>{}) supaya tidak dikira Map.

Kapan pakai Set?

  • Daftar username yang tidak boleh kembar
  • Tag unik sebuah artikel
  • Operasi himpunan: gabungan, irisan, selisih
dart
void main() {
  var a = <int>{1, 2, 3, 4};
  var b = <int>{3, 4, 5, 6};

  print(a.union(b));        // {1, 2, 3, 4, 5, 6} gabungan
  print(a.intersection(b)); // {3, 4} irisan
  print(a.difference(b));   // {1, 2} selisih
}

Map: kamus kunci-nilai

Map menyimpan pasangan key dan value. Key harus unik, value bebas:

dart
void main() {
  var biodata = {
    'nama': 'Rizky',
    'umur': 17,
    'kota': 'Bandung',
  };

  print(biodata['nama']); // Rizky
  print(biodata['umur']); // 17

  biodata['hobi'] = 'ngoding'; // tambah pasangan baru
  biodata['kota'] = 'Jakarta'; // ubah value
  biodata.remove('umur');      // hapus

  print(biodata);
}

Di atas, Dart menebak tipenya Map<String, Object> karena value-nya campuran String dan int. Lebih aman tulis eksplisit:

dart
void main() {
  Map<String, String> kamus = {
    'apel': 'buah berwarna merah',
    'dart': 'bahasa pemrograman',
  };
  print(kamus['dart']);
}

Map<String, String> artinya key String dan value String.

Catatan teknis: Mengakses key yang tidak ada (biodata['alamat']) tidak error, tapi mengembalikan null. Ini sumber bug yang halus: program jalan terus tapi datanya kosong. Selalu cek dengan containsKey kalau key-nya belum pasti ada, atau pakai operator ?? untuk default value: biodata['alamat'] ?? 'tidak diketahui'.

Iterasi Map

dart
void main() {
  var nilai = {'mtk': 90, 'ipa': 85, 'ips': 78};

  for (var entry in nilai.entries) {
    print('${entry.key}: ${entry.value}');
  }

  // atau pakai forEach
  nilai.forEach((mapel, skor) => print('$mapel dapat $skor'));
}

List of Map: pola data nyata

Di dunia nyata, data dari API biasanya berupa list berisi map. Pola ini wajib dikuasai:

dart
void main() {
  var users = [
    {'nama': 'Rizky', 'umur': 17},
    {'nama': 'Sinta', 'umur': 20},
    {'nama': 'Budi', 'umur': 16},
  ];

  for (var u in users) {
    print('${u['nama']} (${u['umur']} tahun)');
  }

  var dewasa = users.where((u) => (u['umur'] as int) >= 17).toList();
  print('Dewasa: ${dewasa.length} orang');
}

(u['umur'] as int) adalah type cast: meyakinkan Dart bahwa value itu int supaya bisa dibandingkan. Nanti di Flutter, pola list-of-map ini muncul terus saat menampilkan data dari internet.

Ringkasan pilihan collection

Butuh...Pakai
Data berurutan, boleh duplikatList
Data unik, tidak peduli urutanSet
Pasangan key-valueMap
Data tabel dari APIList of Map