Rumah > Soal Jawab > teks badan
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.
P粉0806439752023-12-27 15:57:11
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.
found = false for each element of Array: if element matches criteria: do something with element found = true maybe break out of loop (if only interested in first match) if not found: print "Not found"
Python dalam pembolehubah for
循环中有一个 else:
块。仅当循环运行完成时才执行代码,而不是由于使用 break
而结束。这使您可以避免 found
nya (walaupun ia mungkin masih berguna untuk pemprosesan kemudian):
for element in someIterable: if matchesCriteria(element): print("Found") break else: print("Not found")
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.