Ini adalah soalan dan jawapan biasa dengan ralat logik yang saya lihat dalam banyak soalan yang ditanya oleh pengaturcara baru dalam pelbagai bahasa.
Masalahnya ialah mencari tatasusunan untuk elemen yang sepadan dengan kriteria input tertentu. Pseudokod algoritma adalah seperti berikut:
for each element of Array: if element matches criteria: do something with element maybe break out of loop (if only interested in first match) else: print "Not found"
Kod ini akan melaporkan "Tidak Ditemui" walaupun elemen padanan berjaya ditemui.
Masalahnya ialah apabila anda mencari sesuatu secara linear melalui tatasusunan, anda tidak tahu ia tidak ditemui sehingga anda mencapai penghujung tatasusunan. Kod dalam soalan melaporkan "tidak ditemui" untuk setiap elemen yang tidak dipadankan, walaupun mungkin terdapat elemen sepadan yang lain.
Satu pengubahsuaian mudah ialah menggunakan pembolehubah untuk menjejaki sama ada anda menjumpai sesuatu, kemudian semak pembolehubah itu pada penghujung gelung.
Python dalam pembolehubah
for
循环中有一个else:
块。仅当循环运行完成时才执行代码,而不是由于使用break
而结束。这使您可以避免found
nya (walaupun ia mungkin masih berguna untuk pemprosesan kemudian):Sesetengah bahasa mempunyai mekanisme terbina dalam yang boleh digunakan dan bukannya menulis gelung anda sendiri.
any
或some
fungsi yang menerima fungsi panggil balik dan mengembalikan nilai boolean yang menunjukkan sama ada fungsi itu berjaya untuk mana-mana elemen tatasusunan.find
或index
untuk mencari elemen yang sepadan.Jika anda akan mencari dengan kerap, sebaiknya tukar tatasusunan kepada struktur data yang boleh dicari dengan lebih cekap. Kebanyakan bahasa menyediakan
集合
和/或哈希表
struktur data (yang terakhir menggunakan banyak nama bergantung pada bahasa, cth tatasusunan bersekutu, peta, kamus), ini biasanya mengambil masa O(1) untuk mencari dan masa O(n) untuk mengimbas tatasusunan.