【发布时间】:2017-01-09 05:11:19
【问题描述】:
我是 ruby 新手,我想知道为什么会出现这个错误。 (抱歉格式错误)
错误:
rb37: in '%': nil can't be coerced into Fixnum (TypeError)
而且我的问题也需要帮助。我想想出一种方法来遍历 100 万个 ID 号码的列表,以使用最有效的方式(不到 5 分钟)找到特定的 ID。我整个下午都在这:(
def exist?(id)
dump = []
employee_list = $employee_list.sort #employee_list is an array of 1 million lines of data, I have to look for a specific "id"
while dump.length < id
dump << employee_list.first
if dump.last != id
if id%dump.last != 0 && dump.last != 1
employee_list.delete_if { |n| n%dump.last == 0 }
#what im doing here is to delete ID from employee_list that are multiples of n
elsif id%dump.last == 0
employee_list.delete_if { |m| m%dump.last == 0 && m!=id }
#deleting multiples of m (excluding id itself)
end
elsif dump.last == id
return true
end
end
return false
end
【问题讨论】:
-
你真的想要一个包含一百万个项目的数组存储在内存中吗?并像这样排序?
-
这是一个学校问题练习,它要求我提供一种更好的算法,而不是仅仅使用 for 循环来逐一检查,这需要花费数小时。
-
在这种情况下,既然你有一个排序数组,为什么不实现二进制搜索,这比一般情况下的 1 比 1 比较快得多:en.wikipedia.org/wiki/Binary_search_algorithm
-
循环浏览 100 万个项目需要好几个小时!?