Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 搜索数组报告“;“未找到”;即使它';发现_Arrays_Search_Language Agnostic - Fatal编程技术网

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有这个特性,我在回答中展示了它。