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
Bentuknya persis akumulator dari pelajaran 1.2, hanya yang diakumulasi array alih alih angka. Nilai awalnya array kosong, dan itu nilai netral untuk penggabungan.

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
numbers[0, -1]
hasil[]

Array hasil dimulai kosong.

Langkah 1 dari 4
numbers berisi [0, -1]. Perhatikan tidak ada satu pun elemen yang masuk, dan hasilnya array 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.