Memilih sebagian ke array baru
Menyaring bukan membuang. Yang tidak memenuhi kriteria tidak pernah ditambahkan, bukan ditambahkan lalu dihapus.
Sebaiknya baca lebih dulu: Menunjuk elemen lewat nomornya, Benar, salah, dan gabungannya.
Memilih, bukan membuang
Menyaring bekerja begitu. Array hasil dimulai kosong lalu tumbuh, dan yang tidak memenuhi kriteria tidak pernah masuk. Array asalnya tidak disentuh sama sekali.
SET hasil = [] FOR EACH angka IN numbers IF angka > 0 SET hasil = hasil + [angka] END END OUTPUT hasil
IngatNilai awal array hasil adalah array kosong, sama seperti nilai awal penjumlahan adalah nol.
Kenapa bukan menghapus
Menghapus dari array asal
FOR EACH angka IN numbers IF angka <= 0 HAPUS angka DARI numbers END END
Membangun array baru
SET hasil = [] FOR EACH angka IN numbers IF angka > 0 SET hasil = hasil + [angka] END END
Kolom kiri mengubah array yang sedang ia telusuri. Begitu satu elemen dihapus, elemen sesudahnya bergeser satu posisi ke depan, sedangkan penelusuran sudah melewati posisi itu. Akibatnya elemen yang bergeser dilewati tanpa pernah diperiksa. Pada [0, -1] kolom kiri sering menyisakan satu elemen negatif yang seharusnya terbuang. Kolom kanan tidak punya masalah itu, sebab yang ia telusuri dan yang ia tulis dua array berbeda.
Aturan yang pantas dibawa keluar dari sini: jangan mengubah array yang sedang ditelusuri. Kalau memang harus mengubah isinya di tempat, itu pola tersendiri dan pelajaran berikutnya membahasnya.
Nol bukan positif
Kriterianya lebih besar dari nol, bukan lebih besar atau sama dengan nol. Ini kembali ke batas inklusif dari pelajaran 2.2, dan di sini satu karakter menentukan apakah nol ikut terpilih. Kata positif dalam matematika tidak mencakup nol, dan nol bukan bilangan negatif juga; ia tidak punya tanda.
SET hasil = [] FOR EACH angka IN numbers IF angka > 0 SET hasil = hasil + [angka] END END OUTPUT hasil
Array hasil dimulai kosong.
Perhatikan bahwa array kosong sebagai jawaban muncul dua kali di sini dengan sebab berbeda: masukan yang memang kosong, dan masukan yang tidak satu pun elemennya memenuhi kriteria. Keduanya benar, dan keduanya tidak perlu cabang khusus.
Periksa pemahaman
numbers berisi [5, -5, 10, -10, 15]. Apa hasilnya, dan berapa panjang array asalnya sesudahnya?
Ringkasan
- Menyaring membangun array baru. Array asalnya tidak berubah.
- Nilai awal array hasil adalah array kosong.
- Jangan mengubah array yang sedang ditelusuri; elemen yang bergeser akan terlewat.
- Nol bukan positif, dan satu karakter pada operatornya yang menentukan.
- Array kosong sebagai hasil dapat berarti dua hal, dan keduanya benar tanpa cabang khusus.