Menemukan dengan 'firstWhere'
Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 15 dari 65.
Saat kamu perlu menemukan elemen tertentu dalam list yang memenuhi kriteria tertentu, method firstWhere() memberikan solusi yang efisien. Berbeda dengan method pemfilteran yang mengembalikan semua elemen yang cocok, firstWhere() berhenti mencari segera setelah menemukan elemen pertama yang memenuhi kondisimu.
method firstWhere() menerima fungsi pengujian yang mengembalikan true atau false untuk setiap elemen. method ini memeriksa elemen satu per satu sampai menemukan elemen pertama yang lolos pengujian, lalu langsung mengembalikan elemen tersebut.
List<int> numbers = [1, 3, 8, 15, 22, 7];
// Temukan bilangan genap pertama
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven); // 8Untuk situasi ketika tidak ada elemen yang cocok dengan kondisimu, firstWhere() menyediakan parameter opsional orElse. Parameter ini menerima fungsi yang mengembalikan nilai default ketika tidak ditemukan kecocokan, sehingga programmu tidak mengalami error.
Tantangan
MudahBuat program yang mengelola sistem layanan pelanggan dengan menemukan keluhan pelanggan pertama yang memerlukan penanganan segera. Programmu harus:
- Membaca input string yang mewakili nama departemen
- Membaca beberapa input bilangan bulat yang mewakili tingkat prioritas keluhan (input akan berakhir saat kamu menerima
-1) - Membaca input bilangan bulat yang mewakili ambang prioritas mendesak
- Menggunakan method
firstWhere()untuk menemukan keluhan pertama dengan tingkat prioritas yang lebih besar dari atau sama dengan ambang prioritas mendesak - Mencetak hasil layanan pelanggan dalam format persis seperti yang ditampilkan di bawah
Misalnya, jika nama departemennya adalah "Technical Support", tingkat prioritasnya adalah 3, 7, 2, 9, 4, dan ambang prioritas mendesaknya adalah 8, programmu harus menghasilkan output berikut:
Department: Technical Support
All complaints: [3, 7, 2, 9, 4]
Urgent threshold: 8
Searching for first complaint >= 8
First urgent complaint: 9
Status: Urgent complaint found - immediate action requiredJika nama departemennya adalah "Billing Department", tingkat prioritasnya adalah 4, 6, 3, 5, dan ambang prioritas mendesaknya adalah 7, programmu harus menghasilkan output berikut:
Department: Billing Department
All complaints: [4, 6, 3, 5]
Urgent threshold: 7
Searching for first complaint >= 7
First urgent complaint: Not found
Status: No urgent complaints - continue normal processingJika nama departemennya adalah "Sales Support", tingkat prioritasnya adalah 10, 2, 8, dan ambang prioritas mendesaknya adalah 9, programmu harus menghasilkan output berikut:
Department: Sales Support
All complaints: [10, 2, 8]
Urgent threshold: 9
Searching for first complaint >= 9
First urgent complaint: 10
Status: Urgent complaint found - immediate action requiredProgrammu harus menggunakan method firstWhere() untuk menemukan prioritas keluhan pertama yang lebih besar dari atau sama dengan ambang prioritas mendesak. Jika tidak ada keluhan mendesak yang ditemukan, tampilkan "Not found" untuk keluhan mendesak pertama dan tampilkan "No urgent complaints - continue normal processing" sebagai status. Jika keluhan mendesak ditemukan, tampilkan tingkat prioritasnya dan tampilkan "Urgent complaint found - immediate action required" sebagai status.
Coba sendiri
import 'dart:io';
void main() {
// Baca nama departemen
String? department = stdin.readLineSync();
// Baca tingkat prioritas keluhan hingga -1
List<int> complaints = [];
while (true) {
int priority = int.parse(stdin.readLineSync()!);
if (priority == -1) break;
complaints.add(priority);
}
// Baca ambang batas mendesak
int urgentThreshold = int.parse(stdin.readLineSync()!);
// TODO: Tulis kodemu di bawah ini
// Gunakan method firstWhere() untuk menemukan keluhan pertama dengan prioritas >= urgentThreshold
// Tampilkan hasilnya sebagai output
print('Department: $department');
print('All complaints: $complaints');
print('Urgent threshold: $urgentThreshold');
print('Searching for first complaint >= $urgentThreshold');
// Tampilkan hasil keluhan mendesak pertama
// Tampilkan pesan status
}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