问题是在数组中搜索与某些输入条件匹配的元素。用伪代码编写的算法看起来像这样:
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"
即使成功找到匹配的元素,该代码也会报告“未找到”。
#1 楼
问题是,当您通过数组线性搜索某些内容时,您直到到达数组末尾才知道找不到该内容。问题中的代码将为每个不匹配的元素报告“未找到”,即使可能还有其他匹配的元素也是如此。简单的修改是使用一个变量来跟踪您是否发现了某些东西,并且然后在循环结束时检查此变量。
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在
else:
循环中有一个for
块。仅当循环运行完成时才执行代码,而不是由于使用break
而结束。这样可以避免使用found
变量(尽管它可能对以后的处理还是有用的):for element in someIterable:
if matchesCriteria(element):
print("Found")
break
else:
print("Not found")
某些语言具有内置机制,可以代替编写自己的循环。
某些语言具有
any
或some
函数,该函数带有回调函数,并返回一个布尔值,指示该数组是否对数组的任何元素都成功。数组过滤功能,可以使用检查条件的功能过滤输入数组,然后检查结果是否为空数组。 如果您想精确匹配某个元素,则大多数语言都提供
find
或index
函数,它们将搜索匹配的元素。 如果要经常搜索,最好将数组转换为可以更有效地搜索的数据结构。大多数语言都提供
set
和/或hash table
数据结构(后者取决于语言使用许多名称,例如,关联数组,地图,字典),并且通常可以在O(1)时间内搜索,而扫描数组的时间为O( n)。
评论
超越else语句,因此它适用于for循环,而不是if语句@ F1Rumors只有Python才具有该功能,我将在答案中显示它。