gpt4 book ai didi

arrays - 搜索数组报告 "not found",即使它已找到

转载 作者:行者123 更新时间:2023-11-30 21:54:44 25 4
gpt4 key购买 nike

这是一个针对逻辑错误的通用问答,我在各种语言的新程序员提出的许多问题中都看到过。

问题是在数组中搜索与某些输入条件匹配的元素。该算法在伪代码中看起来像这样:

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"

即使成功找到匹配元素,此代码也会报告“未找到”。

最佳答案

问题是,当您在数组中线性搜索某物时,直到到达数组末尾您才能知道它没有找到。问题中的代码为每个不匹配的元素报告“未找到”,即使可能存在其他匹配元素也是如此。

简单的修改是使用一个变量来跟踪你是否找到了什么,然后在循环结束时检查这个变量。

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: block 。这仅在循环运行完成时才执行代码,而不是由于使用 break 而结束。这允许您避免 found 变量(尽管它可能对以后的处理仍然有用):

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

某些语言具有内置机制,可以使用这些机制而不是编写自己的循环。

  • 有些语言有一个 anysome 函数,它接受一个回调函数,并返回一个 bool 值,指示它是否对数组的任何元素成功。
  • 如果语言有数组过滤功能,可以用检查条件的函数过滤输入数组,然后检查结果是否为空数组。
  • 如果您尝试精确匹配元素,大多数语言都提供了 findindex 函数来搜索匹配元素。

如果您要经常搜索,最好将数组转换为可以更有效地搜索的数据结构。大多数语言都提供 set 和/或 hash table 数据结构(后者根据语言有很多名称,例如关联数组、映射、字典),这些通常是可在 O(1) 时间内搜索,而扫描数组是 O(n)。

关于arrays - 搜索数组报告 "not found",即使它已找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45700838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com