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:
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
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:
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:
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 mengembalikannull. Ini sumber bug yang halus: program jalan terus tapi datanya kosong. Selalu cek dengancontainsKeykalau key-nya belum pasti ada, atau pakai operator??untuk default value:biodata['alamat'] ?? 'tidak diketahui'.
Iterasi Map
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:
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 duplikat | List |
| Data unik, tidak peduli urutan | Set |
| Pasangan key-value | Map |
| Data tabel dari API | List of Map |