List, Set & Map

Tiga collection utama Dart: List (berurutan), Set (unik), Map (kunci-nilai); operasi dasar, spread, collection if/for, serta map/where/reduce.

Part 7 dari 20 ± 60 menit Gratis

Mengapa collection?

Kita jarang mengolah satu nilai saja. Daftar nama, kumpulan harga, data pengguna: semuanya butuh wadah. Dart punya tiga collection utama.

CollectionSifatContoh
ListBerurutan, boleh duplikat, diakses dengan indeks[1, 2, 2, 3]
SetTanpa duplikat, tanpa indeks{1, 2, 3}
MapPasangan kunci → nilai{'a': 1, 'b': 2}

List

List<String> buah = ['apel', 'jeruk', 'mangga'];
var angka = <int>[];            // List kosong bertipe int

buah[0];                         // 'apel'
buah.length;                     // 3
buah.first; buah.last;           // 'apel', 'mangga'

buah.add('pisang');              // tambah di akhir
buah.addAll(['kiwi', 'anggur']);
buah.insert(0, 'melon');         // sisip di indeks 0
buah.remove('jeruk');            // hapus berdasarkan nilai
buah.removeAt(0);                // hapus berdasarkan indeks
buah.contains('apel');           // true
buah.indexOf('mangga');          // posisi, atau -1
buah.sort();                     // urutkan di tempat
buah.reversed.toList();          // balik urutan

Akses indeks di luar rentang melempar RangeError. List yang dibuat dengan const [..] atau List.unmodifiable tidak bisa diubah.

Set: nilai unik

var tag = {'dart', 'flutter', 'dart'};   // hanya satu 'dart'
tag.add('web');
tag.contains('dart');                    // true
print(tag.length);                       // 3

var a = {1, 2, 3};
var b = {3, 4};
a.union(b);          // {1, 2, 3, 4}
a.intersection(b);   // {3}
a.difference(b);     // {1, 2}

[1, 2, 2, 3, 3].toSet().toList();   // [1, 2, 3]  (hapus duplikat)

Hati-hati: var x = {}; adalah Map kosong, bukan Set. Untuk Set kosong tulis <String>{}.

Map

Map<String, int> stok = {'apel': 5, 'jeruk': 8};

stok['apel'];                    // 5
stok['durian'];                  // null (tidak ada), tipe hasil: int?
stok['pisang'] = 12;             // tambah / ubah
stok.remove('jeruk');
stok.containsKey('apel');        // true
stok.keys;  stok.values;         // kumpulan kunci / nilai
stok['apel'] = (stok['apel'] ?? 0) + 1;
stok.putIfAbsent('kiwi', () => 3);

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

Spread dan collection if / for

Dart punya sintaks khusus untuk membangun collection secara deklaratif (sering muncul di Flutter):

var a = [1, 2];
var b = [...a, 3, 4];                   // [1, 2, 3, 4]   (spread)
bool admin = true;
var menu = ['Beranda', if (admin) 'Pengaturan', 'Keluar'];
var kuadrat = [for (var i = 1; i <= 4; i++) i * i];   // [1, 4, 9, 16]

Mengolah data dengan map, where, reduce

var angka = [1, 2, 3, 4, 5, 6];

angka.where((n) => n.isEven).toList();           // [2, 4, 6]       saring
angka.map((n) => n * n).toList();                // [1, 4, 9, ...]  ubah tiap elemen
angka.reduce((a, b) => a + b);                   // 21              gabung jadi satu
angka.fold(0, (jumlah, n) => jumlah + n);         // 21 (dengan nilai awal)
angka.any((n) => n > 5);                          // true  (ada yang memenuhi)
angka.every((n) => n > 0);                        // true  (semua memenuhi)
angka.firstWhere((n) => n > 3);                   // 4
angka.take(3).toList();                            // [1, 2, 3]
angka.skip(4).toList();                            // [5, 6]

map dan where menghasilkan Iterable yang malas; tambahkan .toList() bila butuh List.

Mengurutkan dengan aturan sendiri

var nama = ['Budi', 'Al', 'Cintya'];
nama.sort((a, b) => a.length.compareTo(b.length));   // berdasar panjang
// ['Al', 'Budi', 'Cintya']

Memilih collection

KebutuhanPilih
Daftar berurutanList
Memastikan tidak ada duplikat / cek keanggotaan cepatSet
Mencari nilai lewat kunciMap

Error umum

  • RangeError (index): Invalid value: Not in inclusive range 0..2 → indeks salah.
  • Unsupported operation: Cannot add to an unmodifiable list → mengubah list const/unmodifiable.
  • A value of type 'int?' can't be assigned to 'int' → hasil map[kunci] bisa null; beri nilai cadangan dengan ??.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X