私はmtdが1mil以上のレコード(整数のarraylistとして格納されています)を検索してempIDのパスが保存されたレコード。与えられた1milのデータを整数の配列で検索する方法
現在、私はforループを通して順次検索を使用しています。どのように効率的に/より速くするには?
def exist?(id)
for i in 0...$employee_list.length
if $employee_list[i] == id # match!
return true
elsif $employee_list[i] > id # have already gone beyond the point where id should've been found
return false
end
end
return false # cannot find id in the list
end
また、次のようにハッシュを使用してみましたが、それでも十分に高速ではありません。
hash = $employee_list.map{ |i | i}
if hash.include? id
return true
else
return false
end
これは、ハッシュを構築する方法ではありません。あなたは*ハッシュと呼んでいますが、配列をそれ自身にマップして、同じ配列を返します。 – meagar
PS:あなたの 'if/else'ステートメントはアンチパターンです。実際のハッシュを作成するためにハッシュコードが修正されたとしても、 'return hash.include?(id)'や 'hash.include?(id)'( 'return'なし)を記述する必要があります。どのブール値を返すかを決定するブール値の結果をテストすることは、指や手首の浪費であり、後で誰かがコードを読んだり、保守したりするスペースが無駄になります。 – Phrogz
PS値が(より小さい)配列内にあるかどうかをテストする場合は、['Array#include?'](https://ruby-doc.org/core-2.2.0/Array.html#method- i-include-3F)のように、 'def exist?(id); $ employee_list.include?(id);終わり ' – Phrogz