Arrays 搜索数组报告“;“未找到”;即使它';发现
这是一个一般性的问题和答案,我在各种语言的新程序员的许多问题中看到了一个逻辑错误 问题是在数组中搜索与某些输入条件匹配的元素。伪代码中的算法如下所示:Arrays 搜索数组报告“;“未找到”;即使它';发现,arrays,search,language-agnostic,Arrays,Search,Language Agnostic,这是一个一般性的问题和答案,我在各种语言的新程序员的许多问题中看到了一个逻辑错误 问题是在数组中搜索与某些输入条件匹配的元素。伪代码中的算法如下所示: 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:
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:
块。仅当循环运行到完成时才执行代码,而不是由于使用了break
而结束。这允许您避免使用found
变量(尽管它对于以后的处理可能仍然有用):
有些语言有内置的机制,可以用来代替编写自己的循环
- 某些语言有一个
或any
函数,该函数接受回调函数,并返回一个布尔值,指示数组中的任何元素是否成功Some
- 如果语言具有数组过滤函数,则可以使用检查条件的函数过滤输入数组,然后检查结果是否为空数组李>
- 如果要精确匹配某个元素,大多数语言都会提供一个
或find
函数来搜索匹配的元素李>index
如果要经常搜索,最好将数组转换为可以更高效地搜索的数据结构。大多数语言都提供
set
和/或hash table
数据结构(后者根据语言的不同有许多名称,例如关联数组、映射、字典),通常可在O(1)时间内搜索,而扫描数组的时间为O(n).问题是,当您通过数组线性搜索某个对象时,在到达数组末尾之前,您无法知道该对象是否未找到。问题中的代码报告每个不匹配元素的“未找到”,即使可能存在其他匹配元素
简单的修改是使用一个变量跟踪您是否发现了什么,然后在循环结束时检查这个变量
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
变量(尽管它对于以后的处理可能仍然有用):
有些语言有内置的机制,可以用来代替编写自己的循环
- 某些语言有一个
或any
函数,该函数接受回调函数,并返回一个布尔值,指示数组中的任何元素是否成功Some
- 如果语言具有数组过滤函数,则可以使用检查条件的函数过滤输入数组,然后检查结果是否为空数组李>
- 如果要精确匹配某个元素,大多数语言都会提供一个
或find
函数来搜索匹配的元素李>index
如果要经常搜索,最好将数组转换为可以更高效地搜索的数据结构。大多数语言都提供
set
和/或hash table
数据结构(后者根据语言的不同有许多名称,例如关联数组、映射、字典),通常可在O(1)时间内搜索,而扫描数组的时间为O(n).删除else
语句,使其应用于for循环,而不是if循环statement@F1Rumors只有Python有这个特性,我在我的答案中展示了它statement@F1Rumors只有Python有这个特性,我在回答中展示了它。