這是一個邏輯錯誤的通用問題和答案,我在新程式設計師用各種語言提出的許多問題中都看到過。
問題是在陣列中搜尋與某些輸入條件相符的元素。演算法的偽代碼如下所示:
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"
即使成功找到匹配元素,此程式碼也會報告「未找到」。
P粉0806439752023-12-27 15:57:11
問題是,當您透過數組線性搜尋某些內容時,直到到達數組末尾時您才知道沒有找到它。問題中的程式碼針對每個不匹配的元素報告“未找到”,即使可能存在其他匹配元素。
簡單的修改是使用一個變數來追蹤您是否發現了某些內容,然後在循環結束時檢查該變數。
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 在其 for
迴圈中有一個 else:
區塊。僅當循環運行完成時才執行程式碼,而不是因為使用 break
而結束。這使您可以避免 found
變數(儘管它可能對以後的處理仍然有用):
for element in someIterable: if matchesCriteria(element): print("Found") break else: print("Not found")
某些語言具有內建機制,可以使用這些機制來取代編寫自己的循環。
any
或 some
函數,它們接受回呼函數,並傳回一個布林值,指示函數對於陣列的任何元素是否成功。 find
或 index
函數來搜尋匹配元素。 如果您要頻繁搜索,最好將數組轉換為可以更有效搜索的資料結構。大多數語言提供集合
和/或哈希表
資料結構(後者根據語言有許多名稱,例如關聯數組、映射、字典),這些通常是搜尋的時間為O(1),而掃描數組的時間為O(n)。