国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

儘管已找到,陣列仍報(bào)告'未找到”:令人困惑的搜索困境
P粉546179835
P粉546179835 2023-12-26 18:39:31
0
1
690

這是一個(gè)邏輯錯(cuò)誤的通用問題和答案,我在新程式設(shè)計(jì)師用各種語言提出的許多問題中都看到過。

問題是在陣列中搜尋與某些輸入條件相符的元素。演算法的偽代碼如下所示:

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"

即使成功找到匹配元素,此程式碼也會(huì)報(bào)告「未找到」。

P粉546179835
P粉546179835

全部回覆(1)
P粉080643975

問題是,當(dāng)您透過數(shù)組線性搜尋某些內(nèi)容時(shí),直到到達(dá)數(shù)組末尾時(shí)您才知道沒有找到它。問題中的程式碼針對每個(gè)不匹配的元素報(bào)告“未找到”,即使可能存在其他匹配元素。

簡單的修改是使用一個(gè)變數(shù)來追蹤您是否發(fā)現(xiàn)了某些內(nèi)容,然後在循環(huán)結(jié)束時(shí)檢查該變數(shù)。

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 迴圈中有一個(gè) else: 區(qū)塊。僅當(dāng)循環(huán)運(yùn)行完成時(shí)才執(zhí)行程式碼,而不是因?yàn)槭褂?break 而結(jié)束。這使您可以避免 found 變數(shù)(儘管它可能對以後的處理仍然有用):

for element in someIterable:
    if matchesCriteria(element):
        print("Found")
        break
else:
    print("Not found")

某些語言具有內(nèi)建機(jī)制,可以使用這些機(jī)制來取代編寫自己的循環(huán)。

  • 某些語言具有 anysome 函數(shù),它們接受回呼函數(shù),並傳回一個(gè)布林值,指示函數(shù)對於陣列的任何元素是否成功。
  • 如果語言具有數(shù)組過濾功能,則可以使用檢查條件的函數(shù)過濾輸入數(shù)組,然後檢查結(jié)果是否為空數(shù)組。
  • 如果您嘗試精確匹配某個(gè)元素,大多數(shù)語言都提供 findindex 函數(shù)來搜尋匹配元素。

如果您要頻繁搜索,最好將數(shù)組轉(zhuǎn)換為可以更有效搜索的資料結(jié)構(gòu)。大多數(shù)語言提供集合和/或哈希表資料結(jié)構(gòu)(後者根據(jù)語言有許多名稱,例如關(guān)聯(lián)數(shù)組、映射、字典),這些通常是搜尋的時(shí)間為O(1),而掃描數(shù)組的時(shí)間為O(n)。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板