2012-09-19 104 views
-1

我做了以下内容:红宝石数组操作优化

def createDTable 
    dTable = Array.new 
    cTable.each_index do |i| 
    dTable[cTable[i]] = i 
    end 
end 

有什么办法这个(很简单)的代码可以被优化,特别是大型cTable和稀疏dTable

+1

我会用一个哈希而不是一个数组,以便您有一个键值,而不是使每个赋值数组变大。 – AJcodez

+0

@ AJcodez:好的我会试试 –

+0

为什么downvote ..?! –

回答

1

我很好奇,所以我进行了基准测试。 (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