Menu
CoddyTech

Menghapus dari list: removeWhere

Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 5 dari 65.

Terkadang kamu perlu menghapus beberapa elemen dari list berdasarkan kondisi tertentu. Daripada menghapus elemen satu per satu, Dart menyediakan method removeWhere() yang dapat menghapus semua elemen yang memenuhi kondisi pengujian dalam satu operasi.

Method removeWhere() menerima fungsi pengujian sebagai parameternya. Fungsi ini menerima setiap elemen dalam list dan mengembalikan true jika elemen tersebut harus dihapus, atau false jika elemen tersebut harus tetap ada. Method ini kemudian menghapus semua elemen yang fungsi pengujiannya mengembalikan true.

List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];

// Hapus semua bilangan genap
numbers.removeWhere((number) => number % 2 == 0);

print(numbers);  // [1, 3, 5, 7]

Pendekatan ini jauh lebih efisien daripada mencari dan menghapus elemen satu per satu secara manual. Method removeWhere() mengubah list asli secara langsung, sehingga menjadi alat yang ampuh untuk membersihkan list berdasarkan kondisi apa pun yang bisa kamu nyatakan sebagai pengujian boolean.

challenge icon

Tantangan

Mudah

Buat program yang mengelola sistem penyaringan nilai siswa dengan menghapus siswa yang tidak lulus dari daftar siswa di kelas. Programmu harus:

  1. Membaca input string yang mewakili nama kelas
  2. Membaca beberapa input bilangan bulat yang mewakili nilai siswa (input akan berakhir saat kamu menerima -1)
  3. Menggunakan method removeWhere() untuk menghapus semua nilai yang di bawah 60 (nilai tidak lulus)
  4. Mencetak hasil penyaringan nilai dengan format persis seperti yang ditunjukkan di bawah ini

Misalnya, jika nama kelasnya adalah "Mathematics 101" dan nilainya adalah 85, 45, 92, 38, 76, 55, 88, programmu harus menghasilkan output:

Class: Mathematics 101
Original scores: [85, 45, 92, 38, 76, 55, 88]
Removed failing scores (below 60)
Passing scores: [85, 92, 76, 88]
Students passed: 4
Students failed: 3

Jika nama kelasnya adalah "History 201" dan semua nilainya lulus: 75, 82, 91, programmu harus menghasilkan output:

Class: History 201
Original scores: [75, 82, 91]
Removed failing scores (below 60)
Passing scores: [75, 82, 91]
Students passed: 3
Students failed: 0

Jika nama kelasnya adalah "Chemistry 301" dan semua nilainya tidak lulus: 45, 32, 58, programmu harus menghasilkan output:

Class: Chemistry 301
Original scores: [45, 32, 58]
Removed failing scores (below 60)
Passing scores: []
Students passed: 0
Students failed: 3

Programmu harus menggunakan method removeWhere() dengan fungsi pengujian yang mengembalikan true untuk nilai di bawah 60. Method tersebut harus mengubah list asli dengan menghapus semua nilai yang tidak lulus, sehingga hanya menyisakan nilai yang lulus.

Coba sendiri

import 'dart:io';

void main() {
  // Baca nama class
  String? className = stdin.readLineSync();
  
  // Baca nilai hingga menemukan -1
  List<int> scores = [];
  while (true) {
    int score = int.parse(stdin.readLineSync()!);
    if (score == -1) {
      break;
    }
    scores.add(score);
  }
  
  // Simpan nilai asli untuk ditampilkan
  List<int> originalScores = List.from(scores);
  
  // TODO: Tulis kodemu di bawah ini
  // Gunakan method removeWhere() untuk menghapus nilai di bawah 60
  
  // Tampilkan hasilnya
  print('Class: $className');
  print('Original scores: $originalScores');
  print('Removed failing scores (below 60)');
  print('Passing scores: $scores');
  print('Students passed: ${scores.length}');
  print('Students failed: ${originalScores.length - scores.length}');
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Dart online