Saya terkadang mengalami masalah kecil saat melakukan proyek JavaScript. Itu karena sebagian besar fungsi built in JavaScript dijalankan X, Y jika diperlukan posisi. (Dalam urutan itu).
Tetapi ketika saya membangun 2D Array saya mulai dengan Y, tampaknya lebih logis bagi saya untuk menjalankan sumbu X horizontal. Jika saya buruk dalam menjelaskannya, izinkan saya menunjukkan kepada Anda:
Jadi loop saya terlihat seperti ini:
for(var y = 0; y < 10; y++){
for(var x = 0; x < 10; x++){
console.log("Doh!");
}
}
Apakah ini gila? Saya ingin mengonversi ke praktik normal sehingga saya memiliki waktu yang lebih mudah saat membangun permainan saya dan tidak harus melakukan switcherroos konstan.
Jadi mengapa X sebelum Y?
Sunting: Ini adalah contoh lain, dan mungkin alasan utama kebingungan saya: X adalah Horizontal, dan Y adalah Vertikal dalam buku-buku saya ..
[
[0,1,2,3,4],
[0,1,2,3,4],
[0,1,2,3,4],
[0,1,2,3,4],
]
sumber
Jawaban:
Tidak, jika itu bekerja untuk Anda, Anda tidak melakukan kesalahan. Jika Anda ingin beralih, daripada melakukannya. Urutan yang Anda proses baris / kolom kadang-kadang sewenang-wenang, kadang-kadang tidak. Pesanan mana yang Anda gunakan bergantung sepenuhnya pada algoritma yang Anda gunakan.
Ada beberapa kombinasi berbeda untuk memproses X, Y. Terserah Anda untuk memilih mana yang benar untuk algoritma Anda. Dalam kasus di mana setiap iterasi independen dari yang lain, Anda dapat memilih mana yang Anda inginkan. Anda dapat beralih yang ada di loop dalam dan Anda juga dapat beralih jika loop beralih dari min ke max atau max ke min.
Saya membayangkan defaultnya adalah:
karena ini sering kali bagaimana data disusun dalam memori. (Tidak harus benar untuk semua bahasa karena urutan indeks dapat berubah).
Misalnya, sebuah array
A[3][3]
(A[X][Y]
):Di mana
y
nilai berada di kenaikan loop dalam terlebih dahulu dan kemudian "berguling" untuk menambahx
nilai. Selain itu, (X, Y) adalah cara standar untuk menuliskannya dalam matematika.sumber
Anda melakukan itu salah ... semacam. Hal yang salah yang Anda lakukan adalah mengkorelasikan urutan koordinat yang ditulis dengan urutan loop. Itu adalah ide yang sangat berbeda!
Lebih khusus, yang salah adalah bahwa sistem koordinat Anda terikat dengan cara yang kuat (dan rapuh) untuk implementasi penyimpanan data Anda. Itu berarti Anda merancang kode buruk dari sudut pandang OO. Penyimpanan data harus buram pada hal yang menggunakannya, dan hal yang menggunakannya seharusnya tidak peduli bagaimana data disimpan. Pengguna data hanya perlu tahu cara mendapatkan informasi yang diinginkan.
Yang harus Anda lakukan adalah menemukan cara untuk mengabstraksi struktur data array bersarang Anda, dan menyembunyikannya dalam metode seperti
getPoint(x,y)
. Maka Anda tidak perlu khawatir tentang array mana yang bersarang dalam urutan mana. Anda bisa membiarkan struktur data mundur Anda persis seperti itu, selama metode pengambil Anda tahu untuk pertama menemukan array y, dan kemudian mencari di dalamnya untuk elemen x. Tetapi kode apa pun yang menelepongetPoint()
tidak tahu itu. Hanya perlu mengetahui dua koordinat yang diminati.sumber
Tidak masalah! Saya juga selalu menulis Y dulu (terlihat lebih alami). Ketika Anda memiliki matriks dalam array sebagai baris, Anda bahkan dapat melakukan optmisasi. Alih-alih ini:
Anda bisa menggunakan ini:
dan hindari banyak perkalian! :)
sumber