私は次のことをしています:
def createDTable
dTable = Array.new
cTable.each_index do |i|
dTable[cTable[i]] = i
end
end
cTable
この(非常に単純な)コードを、特に大きくてまばらな場合に最適化できる方法はありますdTable
か?
私は次のことをしています:
def createDTable
dTable = Array.new
cTable.each_index do |i|
dTable[cTable[i]] = i
end
end
cTable
この(非常に単純な)コードを、特に大きくてまばらな場合に最適化できる方法はありますdTable
か?
気になったのでベンチマークしてみました。(http://ruby-doc.org/stdlib-1.9.3/libdoc/benchmark/rdoc/Benchmark.html)
C テーブルの乱数を生成しました。基本的に、値が配列の長さの範囲内にある場合は配列を使用する方が高速であり、値がはるかに大きい場合はハッシュを使用する方が適切です。
5つの異なる組み合わせで試しました:
randoms to 10,000, array size 100,000 => Array
randoms to 100,000, Array size 10,000 => Hash
randoms to 100,000, array size 100,000 => Array
randoms to 1,000,000, Array size 100,000 => Array
randoms to 10,000,000, Array size 100,000 => Hash
とにかく、これが私の代替コードですが、大丈夫かもしれません。
def create_d_hash(c_table)
d_hash = {}
c_table.each_with_index do |value, index|
d_hash[value] = index
end
d_hash
end