Menunjuk elemen lewat nomornya

Nomor pertama adalah nol, nomor terakhir adalah panjang dikurangi satu, dan di luar itu tidak ada apa apa.

Sebaiknya baca lebih dulu: Menukar isi dua wadah.

Loker bernomor

Array bernomor dari nol. Itu bukan pilihan aneh yang dibuat untuk menyulitkan: indeks sebenarnya jarak dari awal, dan elemen pertama berjarak nol dari awal. Akibatnya indeks terakhir selalu panjang array dikurangi satu.

IngatArray berisi tiga elemen punya indeks sah nol, satu, dan dua. Indeks tiga tidak ada.

SET numbers[index] = value
OUTPUT numbers
Menulis ke satu indeks mengganti elemen di posisi itu. Panjang arraynya tidak berubah, dan elemen lain tidak tersentuh.

Rentang indeks yang sah

Menuliskan syaratnya secara lengkap menuntut dua pemeriksaan sekaligus, dan bentuknya persis rentang inklusif dari pelajaran 2.4. Bedanya kedua batasnya tidak datang dari masukan, melainkan dari arraynya sendiri.

  • Batas bawah nol. Indeks tidak pernah boleh negatif.
  • Batas atas panjang dikurangi satu.
  • Array kosong tidak punya satu pun indeks sah, sebab nol dikurangi satu bernilai negatif satu.

Hanya memeriksa batas atas

IF index < LENGTH(numbers)
  SET numbers[index] = value
END

Memeriksa kedua batas

IF index >= 0 AND index < LENGTH(numbers)
  SET numbers[index] = value
END

Kolom kiri meloloskan indeks negatif satu, sebab negatif satu memang lebih kecil daripada panjang array. Yang terjadi sesudahnya bergantung bahasanya, dan beberapa bahasa memperlakukan negatif satu sebagai elemen terakhir sehingga kode itu mengganti elemen yang salah tanpa satu pun tanda. Indeks negatif bukan indeks yang ada, dan menganggapnya begitu adalah anggapan yang paling mahal di seluruh pelajaran ini.

Indeks yang tidak ada bukan kegagalan

Ini keputusan tentang arti, bukan tentang teknik. Ketika indeksnya di luar rentang, arraynya dikembalikan apa adanya. Bukan array kosong, bukan galat, bukan array yang diperpanjang sampai indeksnya ada. Permintaan untuk mengganti sesuatu yang tidak ada paling jujur dijawab dengan tidak mengganti apa pun.

IF index >= 0 AND index < LENGTH(numbers)
  SET numbers[index] = value
END
OUTPUT numbers
numbers[1, 2]
index5
value9

Pemeriksaan pertama: 5 lebih besar atau sama dengan 0? Ya.

Langkah 1 dari 3
numbers [1, 2] dengan index 5. Perhatikan penugasan tidak pernah dijalankan, dan arraynya keluar utuh.

Periksa pemahaman

numbers berisi lima elemen. Indeks mana saja yang lolos pemeriksaan indeks >= 0 AND indeks < 5?

Ringkasan

  • Indeks adalah jarak dari awal, jadi elemen pertama berindeks nol.
  • Indeks terakhir selalu panjang dikurangi satu.
  • Indeks yang sah wajib diperiksa dari dua sisi. Memeriksa batas atas saja meloloskan indeks negatif.
  • Indeks negatif bukan hitungan dari belakang. Anggap ia tidak ada.
  • Array kosong tidak punya satu pun indeks sah.
  • Permintaan pada indeks yang tidak ada dijawab dengan tidak mengubah apa pun, bukan dengan galat.