线性搜索未成功完成
Posted
技术标签:
【中文标题】线性搜索未成功完成【英文标题】:Linear Search not completing successfully 【发布时间】:2015-04-26 04:40:57 【问题描述】:在数组上循环执行基本线性搜索,但不返回预期值。给定:
students = ["Alex", "Kyle", "Libby", "Monkey Boy"]
我正在尝试进行基本的线性搜索以查看名称“Monkey Boy”是否存在,并返回它的索引。
def linear_search(array, name)
i = 0
while i < array.length
if array[i] == "#name"
return i
else
return -1
end
i+=1
end
end
linear_search(students, "Alex") # returns 0
linear_search(students, "Monkey Boy") # returns -1, should return 3
非常困惑。这是怎么回事?
【问题讨论】:
【参考方案1】:如果仔细看,你的 while 块是不正确的
def linear_search(array, name)
i = 0
while i < array.length
if array[i] == "#name"
return i
else
return -1
end
i+=1
end
end
当你搜索linear_search(students, "Alex")
"Alex"
存在于数组 [0] 中,array[i] == "#name"
是 true
它返回 i 并中断循环
当你搜索linear_search(students, "Monkey Boy")
"Monkey Boy"
存在于数组 [3] 中,第一次 array[i] == "#name"
是 false
即 "Alex"
== "Monkey Boy"
它返回 -1,即执行 else 部分并打破循环不增加强>
如果您将 else 部分从 while 中删除,它将作为较早的答案或更优雅的方式工作
def linear_search(array, name)
return array.index(name).nil? ? -1 : array.index(name)
end
linear_search(students, "Kyle") # 0
linear_search(students, "Monkey Boy") # 3
linear_search(students, "Monkey") # -1
【讨论】:
【参考方案2】:return -1
应该在 while 循环之外。
def linear_search(array, name)
i = 0
while i < array.length
if array[i] == "#name"
return i
end
i+=1
end
return -1
end
【讨论】:
但这不就是“else”子句的用途吗? @liuzxc @KyleSnowSchwartz 这是真的,如果你将else
保留在for loop
中,那么if
语句将只运行一次,发现字符串不相等,所以它会运行 else
部分并返回 -1。
@KyleSnowSchwartz 如果您正在寻找更好的方法。 Ruby 有很多函数可以让你用更少但更有表现力的代码来做到这一点。以上是关于线性搜索未成功完成的主要内容,如果未能解决你的问题,请参考以下文章