0

在数组上循环执行基本线性搜索,而不返回预期值。鉴于:

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

很困惑。这里发生了什么?

4

2 回答 2

1

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
于 2015-04-26T04:54:28.847 回答
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}"falseie "Alex"=="Monkey Boy"它返回 -1,即执行 else 部分并打破循环不增加

如果您从 while 中删除 else 部分,它将作为较早的答案或更优雅的方式工作

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
于 2015-04-26T06:41:08.573 回答