Ruby代码qn。如何减少迭代次数

Ruby代码qn。如何减少迭代次数,ruby,iteration,Ruby,Iteration,我是ruby新手,我想知道为什么会出现这个错误。(很抱歉格式错误) 错误: rb37: in '%': nil can't be coerced into Fixnum (TypeError) 我的问题也需要帮助。我想提出一种方法,用最有效的方法(在不到5分钟的时间内)遍历包含100万个ID号的列表,找到一个特定的ID。我整个下午都在做这个:( def存在?(id) 转储=[] employee_list=$employee_list.sort#employee_list是一个包含100万行数

我是ruby新手,我想知道为什么会出现这个错误。(很抱歉格式错误)

错误:

rb37: in '%': nil can't be coerced into Fixnum (TypeError)
我的问题也需要帮助。我想提出一种方法,用最有效的方法(在不到5分钟的时间内)遍历包含100万个ID号的列表,找到一个特定的ID。我整个下午都在做这个:(

def存在?(id)
转储=[]
employee_list=$employee_list.sort#employee_list是一个包含100万行数据的数组,我必须查找一个特定的“id”
而dump.lengthdump老实说,我完全不知道你的代码试图做什么,但问题是:你循环直到你的
dump
数组的长度大于你正在搜索的
id
。在循环中,你将
员工列表的第一个元素添加到
dump
的末尾。你还删除了一些内容从
员工列表中

现在,取决于
id
的大小,您将经常循环。例如,想象
id
是,比如说,
1234567890
,您将循环超过10亿次,并且将超过10亿个元素添加到
dump
数组中。同时,您还不断地从
员工中删除内容ist
。很可能在某个时间点,
employee\u list
将变为空,这意味着
employee\u list。首先
将变为
nil
,您将附加
nil
作为
dump
的最后一个元素,因此您将尝试在第行中取
id
nil
的模数9、10、12或13

就像我说的,我根本不明白你在做什么,所以我不能告诉你如何解决这个问题

下面是我解决问题的方法:

def exist?(id)
  $employee_list.find(id)
end

你真的想拥有一个存储在内存中有一百万个项目的数组吗?并像这样排序?这是一个学校的问题练习,要求我提供一个比仅仅使用for循环来检查1乘1更好的算法,这将花费很多小时。在这种情况下,既然你有一个排序数组,为什么不实现一个二进制搜索,它比在平均情况下,一对一的比较:循环100万个项目需要很多小时!?
def exist?(id)
  $employee_list.find(id)
end