私はRubyが新しく、なぜこのエラーが発生するのか不思議です。 (悪いフォーマットのため申し訳ありませんが)ルビーコードqn。反復を減らす方法
エラー:
rb37: in '%': nil can't be coerced into Fixnum (TypeError)
そしてまた、私は私の質問に助けが必要。私は可能な限り効率的な方法を使って特定のIDを見つけるために100万のID番号のリストを実行する方法を考え出しています(5分以内)。あなたのdump
配列の長さになるまで、あなたのループがより大きくされています。私はこの時、全体の午後してきた:(
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
あなたが本当にメモリに保存されたONE MILLIONアイテムを持つ配列を持つようにしたいですか?そしてこのように分類された? –
これは、forループを使って1 by 1をチェックするだけでなく、何時間もかかるより良いアルゴリズムを私に求めている学校の質問練習です。 – Clement
この場合、ソートされた配列があるので、バイナリ検索を実装しないでください。平均的な場合、1対1の比較よりもかなり速いです:https://en.wikipedia.org/wiki/Binary_search_algorithm –