Masukkan Password
41 4.3 Set in Dart Programming Language | Set in More Details | Learn Dart Language | Dart Course
Sekarang kita masuk ke Set di Dart. Konsep Set sebenarnya cukup mudah kalau dibandingkan langsung dengan List dan Map.
Inti paling pentingnya adalah:
Set adalah kumpulan data yang setiap elemennya harus unik/tidak boleh duplikat.
Kalau List seperti daftar biasa yang boleh berisi data berulang, Set seperti kumpulan yang berkata:
βSaya hanya mau menyimpan satu dari setiap nilai yang sama.β
1. Apa itu Set?
Misalnya kita punya:
Set<String> days = {
"Sunday",
"Monday",
"Tuesday",
};
Di sini kita mempunyai 3 data:
Sunday
Monday
Tuesday
Set menggunakan curly braces {}.
{
"Sunday",
"Monday",
"Tuesday"
}
Berbeda dengan List yang menggunakan square brackets:
[
"Sunday",
"Monday",
"Tuesday"
]
Jadi secara sederhana:
List β [...]
Set β {...}
Map β {key: value}
β οΈ Tetapi ada hal penting: {} saja bisa menjadi Set atau Map tergantung isinya.
Contoh Set:
{"Budi", "Andi", "Siti"}
Contoh Map:
{"name": "Budi", "age": 20}
Kenapa?
Karena Map mempunyai pola:
key : value
sedangkan Set hanya mempunyai:
value
value
value
2. Ciri utama Set: tidak boleh duplikat
Misalnya:
Set<String> fruits = {
"Apple",
"Banana",
"Apple",
};
Kita mencoba memasukkan "Apple" dua kali.
Set tidak mengizinkan duplikasi. Secara konsep, hasilnya menjadi:
Apple
Banana
bukan:
Apple
Banana
Apple
Ini adalah perbedaan paling penting antara Set dan List.
List
List<String> fruits = [
"Apple",
"Banana",
"Apple",
];
Boleh:
Apple
Banana
Apple
Set
Set<String> fruits = {
"Apple",
"Banana",
"Apple",
};
Hanya menyimpan:
Apple
Banana
Jadi:
List boleh duplikat, Set tidak boleh duplikat.
3. Analogi sederhana
Bayangkan kamu sedang membuat daftar peserta lomba.
Kalau menggunakan List:
Budi
Andi
Budi
Siti
Andi
Tidak masalah.
Tetapi kalau menggunakan Set:
Budi
Andi
Siti
Ketika "Budi" dimasukkan lagi, Set berkata:
“Budi sudah ada. Tidak perlu disimpan lagi.”
Ini sangat berguna kalau kita ingin memastikan data unik.
4. Kapan Set berguna?
Set cocok ketika kita tidak membutuhkan data duplikat.
Contohnya:
Daftar hari
Set<String> days = {
"Sunday",
"Monday",
"Tuesday",
};
Daftar bulan
Set<String> months = {
"January",
"February",
"March",
};
Daftar kategori unik
Set<String> categories = {
"Programming",
"Design",
"Programming",
};
Hasilnya tetap hanya:
Programming
Design
5. Set tidak digunakan seperti List dengan index
Ini bagian yang sangat penting.
Pada List, kita bisa:
List<String> names = [
"Budi",
"Andi",
"Siti",
];
print(names[0]);
Hasil:
Budi
Karena List memiliki index:
index 0 β Budi
index 1 β Andi
index 2 β Siti
Sedangkan Set bukan koleksi yang kita akses menggunakan index.
Jadi konsep seperti:
days[0]
bukan cara yang digunakan untuk Set.
6. Kenapa Set tidak memakai index?
Karena tujuan utama Set bukan untuk mengatakan:
“Data ini berada di posisi nomor 0.”
Tujuan Set adalah:
“Data ini ada atau tidak?”
Misalnya:
Set:
Budi
Andi
Siti
Yang penting adalah:
Apakah Budi ada?
Apakah Andi ada?
Apakah Siti ada?
bukan:
Siapa yang berada di index 1?
Jadi kalau kebutuhanmu adalah akses berdasarkan posisi, biasanya List lebih cocok.
Kalau kebutuhanmu adalah menyimpan data unik dan mengecek keberadaan data, Set sangat cocok.
7. .elementAt() untuk mengambil elemen berdasarkan posisi
Pada materi disebutkan elementAt().
Contoh:
Set<String> days = {
"Sunday",
"Monday",
"Tuesday",
};
print(days.elementAt(1));
Secara contoh bisa menghasilkan:
Monday
Tetapi ada hal yang perlu kamu pahami:
Jangan menganggap Set seperti List yang memiliki index stabil.
elementAt() mengambil elemen berdasarkan posisi iterasi saat itu, tetapi Set bukan struktur data yang seharusnya digunakan untuk mengandalkan posisi seperti List.
Kalau kamu memang membutuhkan:
index 0
index 1
index 2
gunakan List.
8. .length
Sama seperti List, Set mempunyai:
days.length
Contoh:
Set<String> days = {
"Sunday",
"Monday",
"Tuesday",
};
print(days.length);
Hasil:
3
Karena ada 3 elemen unik.
9. .isEmpty
Untuk mengecek apakah Set kosong:
print(days.isEmpty);
Kalau Set berisi data:
false
Kalau Set kosong:
true
Contoh:
Set<String> days = {};
print(days.isEmpty);
Hasil:
true
10. .isNotEmpty
Kebalikannya:
print(days.isNotEmpty);
Kalau ada data:
true
Kalau kosong:
false
Jadi:
| Kondisi | isEmpty | isNotEmpty |
|---|---|---|
| Kosong | true | false |
| Ada data | false | true |
11. Menghapus semua data dengan .clear()
Kalau kita punya:
Set<String> days = {
"Sunday",
"Monday",
"Tuesday",
};
Kemudian:
days.clear();
Semua elemen dihapus.
Set menjadi kosong:
{}
Kalau kemudian:
print(days.isEmpty);
hasilnya:
true
12. Mengecek apakah sebuah nilai ada dengan .contains()
Ini salah satu fungsi yang sangat berguna pada Set.
Contoh:
print(days.contains("Monday"));
Kalau "Monday" ada:
true
Kalau:
print(days.contains("Friday"));
dan "Friday" tidak ada:
false
Jadi:
days.contains(value)
artinya:
“Apakah value ini ada di dalam Set?”
13. contains() vs containsAll()
Kalau kita ingin mengecek satu nilai:
days.contains("Monday")
Kalau ingin mengecek beberapa nilai sekaligus:
days.containsAll([
"Sunday",
"Monday",
]);
Hasilnya:
true
jika kedua nilai tersebut ada.
14. Memahami containsAll()
Misalnya:
Set<String> days = {
"Sunday",
"Monday",
"Tuesday",
};
Kemudian:
days.containsAll([
"Sunday",
"Monday",
]);
Dart bertanya:
Apakah Sunday ada? β
Apakah Monday ada? β
Karena semuanya ada:
true
Tetapi:
days.containsAll([
"Sunday",
"Friday",
]);
hasilnya:
false
Karena:
Sunday β ada β
Friday β tidak ada β
containsAll() berarti:
Semua nilai yang diberikan harus tersedia.
15. Menambahkan satu data dengan .add()
Untuk menambahkan satu elemen:
days.add("Wednesday");
Misalnya awalnya:
Sunday
Monday
Tuesday
Setelah:
days.add("Wednesday");
menjadi:
Sunday
Monday
Tuesday
Wednesday
16. Kalau menambahkan data yang sudah ada?
Misalnya:
days.add("Sunday");
Padahal "Sunday" sudah ada.
Set tetap hanya memiliki satu "Sunday".
Ini adalah sifat utama Set:
Data baru belum ada
β
ADD
Data sudah ada
β
Tidak membuat duplikat
17. Menambahkan banyak data dengan .addAll()
Kalau ingin menambahkan beberapa data sekaligus:
days.addAll([
"Thursday",
"Friday",
"Saturday",
]);
Set akan mendapatkan semua nilai tersebut.
add():
days.add("Thursday");
untuk satu nilai.
addAll():
days.addAll([
"Thursday",
"Friday",
]);
untuk banyak nilai.
18. .first dan .last
Dart juga menyediakan:
days.first
dan:
days.last
untuk mendapatkan elemen pertama/terakhir dari urutan iterasi Set.
Contoh:
print(days.first);
print(days.last);
Tetapi ingat kembali:
Jangan menjadikan posisi/urutan Set sebagai sesuatu yang harus diandalkan seperti List.
Set digunakan terutama untuk keunikan dan operasi himpunan, bukan untuk pengurutan berdasarkan index.
19. Menghapus satu nilai dengan .remove()
Misalnya:
days.remove("Tuesday");
Maka "Tuesday" dihapus.
Contoh:
Set<String> days = {
"Sunday",
"Monday",
"Tuesday",
};
days.remove("Tuesday");
print(days);
Sekarang:
Sunday
Monday
Perhatikan bahwa remove() menerima nilai, bukan index.
Ini berbeda dengan beberapa operasi pada List.
20. Menghapus beberapa nilai dengan .removeAll()
Kalau ingin menghapus beberapa nilai:
days.removeAll([
"Sunday",
"Monday",
]);
Maka kedua nilai tersebut dihapus.
Misalnya:
Sunday
Monday
Tuesday
setelah:
days.removeAll([
"Sunday",
"Monday",
]);
menjadi:
Tuesday
Jadi:
remove() β hapus satu value
removeAll() β hapus beberapa value
21. removeWhere()
Sama seperti pada List, Set juga mempunyai:
removeWhere()
Kita bisa menghapus data berdasarkan kondisi.
Contoh:
days.removeWhere((item) {
return item == "Sunday";
});
Artinya:
Hapus elemen yang nilainya
"Sunday".
22. removeWhere() dengan arrow function
Karena kondisinya sederhana, bisa ditulis:
days.removeWhere((item) => item == "Sunday");
Ini sama dengan:
days.removeWhere((item) {
return item == "Sunday";
});
Jadi kamu akan sering melihat bentuk:
(item) => kondisi
Ini adalah arrow function.
23. Looping Set dengan for-in
Kalau ingin membaca semua elemen satu per satu:
for (var item in days) {
print(item);
}
Misalnya:
Set<String> days = {
"Sunday",
"Monday",
"Tuesday",
};
Loop tersebut akan memproses:
Sunday
Monday
Tuesday
satu per satu.
24. Kenapa for-in cocok untuk Set?
Karena kita tidak membutuhkan index.
Pada List, kadang kita berpikir:
index 0
index 1
index 2
Pada Set, cukup:
ambil satu item
proses
ambil item berikutnya
proses
...
Jadi:
for (var item in days)
berarti:
“Untuk setiap item yang ada di dalam Set
days, lakukan sesuatu.”
25. Looping dengan forEach()
Cara lain:
days.forEach((item) {
print(item);
});
Hasilnya sama:
Sunday
Monday
Tuesday
Bisa juga ditulis lebih singkat:
days.forEach((item) => print(item));
26. for-in vs forEach()
Keduanya bisa digunakan untuk membaca elemen Set.
for-in
for (var item in days) {
print(item);
}
forEach
days.forEach((item) {
print(item);
});
Untuk pemula, saya sarankan memahami for-in terlebih dahulu karena bentuknya mudah dibaca:
“untuk setiap item di days…”
27. Bagian paling menarik: operasi himpunan
Sekarang kita masuk ke bagian Set yang paling penting dan menjadi salah satu alasan Set sangat berguna.
Ada tiga operasi utama:
- Union
- Intersection
- Difference
Konsep ini sebenarnya sama seperti himpunan dalam matematika.
28. Misalkan kita punya dua Set
Kita buat:
Set<String> setA = {
"Sunday",
"Monday",
"Tuesday",
};
dan:
Set<String> setB = {
"Tuesday",
"Wednesday",
"Thursday",
};
Kalau digambarkan:
SET A
Sunday
Monday
Tuesday
SET B
Tuesday
Wednesday
Thursday
Keduanya mempunyai satu data yang sama:
Tuesday
Nah, dari sini kita bisa melakukan berbagai operasi.
29. Union
Union berarti:
Menggabungkan semua elemen dari dua Set tanpa duplikat.
Gunakan:
setA.union(setB)
Set A:
Sunday
Monday
Tuesday
Set B:
Tuesday
Wednesday
Thursday
Union:
Sunday
Monday
Tuesday
Wednesday
Thursday
Perhatikan Tuesday hanya muncul sekali.
Kenapa?
Karena hasilnya tetap sebuah Set.
30. Analogi Union
Bayangkan:
Teman Budi:
Budi
Andi
Siti
Teman Andi:
Siti
Rudi
Doni
Kalau kita ingin mendapatkan semua teman dari kedua daftar tanpa duplikat, kita menggunakan Union.
Hasil:
Budi
Andi
Siti
Rudi
Doni
Siti tidak muncul dua kali.
31. Intersection
Intersection berarti:
Mencari data yang sama-sama terdapat di kedua Set.
Gunakan:
setA.intersection(setB)
Set A:
Sunday
Monday
Tuesday
Set B:
Tuesday
Wednesday
Thursday
Yang sama hanya:
Tuesday
Maka:
setA.intersection(setB)
hasilnya:
Tuesday
32. Analogi Intersection
Misalnya:
Orang yang suka programming:
Budi
Andi
Siti
Orang yang suka gaming:
Siti
Rudi
Doni
Siapa yang suka keduanya?
Siti
Itulah Intersection.
Jadi:
Intersection = mencari irisan / data yang sama.
33. Difference
Difference berarti:
Mencari elemen yang ada di Set pertama tetapi tidak ada di Set kedua.
Gunakan:
setA.difference(setB)
Set A:
Sunday
Monday
Tuesday
Set B:
Tuesday
Wednesday
Thursday
Kita mulai dari Set A:
Sunday
Monday
Tuesday
Kemudian buang yang juga ada di Set B:
Tuesday
Maka hasilnya:
Sunday
Monday
Jadi:
setA.difference(setB)
menghasilkan:
Sunday
Monday
34. Difference itu arah
Ini bagian yang sangat penting.
setA.difference(setB)
berbeda dengan:
setB.difference(setA)
Karena operasi difference bergantung pada Set pertama.
Kita punya:
A = {Sunday, Monday, Tuesday}
B = {Tuesday, Wednesday, Thursday}
Maka:
A.difference(B)
hasil:
Sunday
Monday
Sedangkan:
B.difference(A)
hasil:
Wednesday
Thursday
Kenapa?
Karena kita mencari:
A - B
berbeda dengan:
B - A
35. Visualisasi Union, Intersection, Difference
Kita bisa membayangkannya seperti ini:
SET A SET B
βββββββββ βββββββββ
βSunday β βWed β
βMonday β βThurs β
β β Tuesday β β
βββββββββ βββββββββ
Union
Semua:
Sunday
Monday
Tuesday
Wednesday
Thursday
Intersection
Yang sama:
Tuesday
A Difference B
Yang hanya ada di A:
Sunday
Monday
B Difference A
Yang hanya ada di B:
Wednesday
Thursday
36. Ringkasan fungsi Set
Ini bagian yang bagus untuk kamu jadikan catatan.
| Fungsi | Kegunaan |
|---|---|
add() | Menambah satu elemen |
addAll() | Menambah banyak elemen |
remove() | Menghapus satu elemen |
removeAll() | Menghapus beberapa elemen |
removeWhere() | Menghapus berdasarkan kondisi |
contains() | Mengecek satu elemen |
containsAll() | Mengecek beberapa elemen |
length | Jumlah elemen |
isEmpty | Mengecek apakah kosong |
isNotEmpty | Mengecek apakah tidak kosong |
clear() | Menghapus seluruh isi |
first | Elemen pertama dari iterasi |
last | Elemen terakhir dari iterasi |
for-in | Loop semua elemen |
forEach() | Loop semua elemen |
union() | Gabungan dua Set |
intersection() | Elemen yang sama |
difference() | Elemen yang hanya ada di Set pertama |
37. Perbandingan List, Set, dan Map
Karena kamu sudah mempelajari List dan Map, sekarang kita gabungkan ketiganya.
| List | Set | Map | |
|---|---|---|---|
| Bentuk | [] | {} | {key: value} |
| Duplikat | β Boleh | β Tidak | Key harus unik |
| Akses utama | Index | Value/keberadaan | Key |
| Contoh | ["Budi", "Budi"] | {"Budi", "Andi"} | {"name": "Budi"} |
| Cocok untuk | Urutan data | Data unik | Key-value |
contains | β | β | Tidak seperti Set; gunakan containsKey/containsValue |
| Union/intersection | Tidak menjadi fokus | β | β |
38. Kapan menggunakan List?
Gunakan List kalau:
Urutan dan posisi data penting.
Contoh:
List<String> names = [
"Budi",
"Andi",
"Siti",
];
Kamu bisa berkata:
index 0 = Budi
index 1 = Andi
index 2 = Siti
Dan duplikat boleh.
39. Kapan menggunakan Set?
Gunakan Set kalau:
Kamu membutuhkan data yang unik dan tidak membutuhkan akses berdasarkan index.
Contoh:
Set<String> usernames = {
"budi123",
"andi456",
"siti789",
};
Misalnya kita ingin memastikan username tidak muncul dua kali.
Atau ketika ingin melakukan:
A βͺ B
A β© B
A - B
Set sangat cocok.
40. Kapan menggunakan Map?
Gunakan Map kalau:
Kamu ingin menghubungkan sebuah key dengan value.
Contoh:
Map<String, dynamic> user = {
"name": "Budi",
"age": 23,
"city": "Madiun",
};
Di sini:
"name" β "Budi"
"age" β 23
"city" β "Madiun"
41. Contoh program Set lengkap
Berikut contoh yang menggabungkan banyak materi:
void main() {
Set<String> days = {
"Sunday",
"Monday",
"Tuesday",
};
// Menambahkan data
days.add("Wednesday");
// Menambahkan banyak data
days.addAll([
"Thursday",
"Friday",
]);
// Mengecek data
print(days.contains("Monday"));
// Jumlah data
print(days.length);
// Menghapus data
days.remove("Friday");
// Loop
for (var day in days) {
print(day);
}
// Set kedua
Set<String> weekend = {
"Saturday",
"Sunday",
};
// Union
print(days.union(weekend));
// Intersection
print(days.intersection(weekend));
// Difference
print(days.difference(weekend));
}
Dengan contoh ini kamu sudah menggunakan:
Set
β
add()
addAll()
contains()
length
remove()
for-in
union()
intersection()
difference()
42. Hal yang paling penting dari Set
Kalau kamu masih pemula, jangan langsung menghafalkan semua method.
Fokus dulu pada 5 konsep utama:
β Set tidak menyimpan duplikat
Set<int> numbers = {1, 2, 2, 3};
Secara konsep:
{1, 2, 3}
β‘ Set bukan untuk akses berdasarkan index
Jangan berpikir seperti:
index 0
index 1
index 2
seperti pada List.
β’ Gunakan contains() untuk mengecek keberadaan
numbers.contains(2);
Hasil:
true
β£ Gunakan add() dan remove()
numbers.add(4);
numbers.remove(2);
β€ Set sangat kuat untuk operasi himpunan
setA.union(setB);
setA.intersection(setB);
setA.difference(setB);
π§ Cara paling gampang mengingat List, Set, Map
Bayangkan kamu sedang mengelola data mahasiswa.
List
Seperti daftar antrean:
0 β Budi
1 β Andi
2 β Siti
Yang penting adalah urutan/posisi.
Set
Seperti daftar nama unik:
Budi
Andi
Siti
Kalau Budi dimasukkan lagi:
Budi
Andi
Siti
Budi β sudah ada, tidak perlu
Yang penting adalah keunikan.
Map
Seperti data profil:
name β Budi
age β 23
city β Madiun
Yang penting adalah hubungan:
KEY β VALUE
π₯ Kesimpulan
Jadi, kalau disederhanakan:
LIST
β
Banyak data
+ boleh duplikat
+ punya index
+ urutan penting
SET
β
Banyak data
+ tidak boleh duplikat
+ cocok untuk data unik
+ cocok untuk operasi himpunan
MAP
β
KEY β VALUE
+ key harus unik
+ mengambil data berdasarkan key
+ cocok untuk data terstruktur
Dan tiga operasi Set yang wajib banget kamu pahami adalah:
setA.union(setB)
β‘οΈ semua data dari A dan B
setA.intersection(setB)
β‘οΈ data yang sama-sama ada di A dan B
setA.difference(setB)
β‘οΈ data yang ada di A tetapi tidak ada di B
Kalau tiga konsep ini sudah kamu kuasai, berarti kamu sudah memahami bagian paling penting dari Set di Dart.