--Apple-Mail-2-287622042 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset -ASCII; formatšļwed On Jan 24, 2007, at 15:20, Vincent Fourmond wrote: > Vincent Fourmond wrote: >> h } >> for k,v in hash >> [k].flatten.each {|l| h[l] } >> end >> hash > > Actually, I've got shorter ;-): > > h } > for k,v in hash > [*k].each {|l| h[l] } > end > hash but fastest (I assume all entries worked correctly): $ ruby bm.rb Rehearsal -------------------------------------------------------- original 10.440000 0.010000 10.450000 ( 10.492738) original clean 11.480000 0.040000 11.520000 ( 11.632237) vince 5.210000 0.010000 5.220000 ( 5.264394) william 12.760000 0.020000 12.780000 ( 12.814230) daniel 6.900000 0.010000 6.910000 ( 6.924297) robert inject 6.560000 0.000000 6.560000 ( 6.588160) robert inject rescue 6.080000 0.010000 6.090000 ( 6.094140) ---------------------------------------------- total: 59.530000sec user system total real original 10.450000 0.010000 10.460000 ( 10.467971) original clean 11.490000 0.030000 11.520000 ( 11.600672) vince 5.210000 0.000000 5.210000 ( 5.219863) william 12.820000 0.010000 12.830000 ( 12.839722) daniel 6.930000 0.010000 6.940000 ( 6.945329) robert inject 6.580000 0.010000 6.590000 ( 6.591095) robert inject rescue 6.080000 0.000000 6.080000 ( 6.117226) --Apple-Mail-2-287622042 Content-Transfer-Encoding: 7bit Content-Type: text/x-ruby-script; x-unix-mode44; namerb Content-Disposition: attachment; filename”¼.rb require 'benchmark' N 00_000 hash "index" "list", ["edit", "update"] "manage_one", ["new", "create", "destroy"] "manage_all" } Benchmark.bmbm do |bm| bm.report 'original' do N.times do Hash[*hash.to_a.collect{|x| Array x[0] ? x[0].zip([x[1]]*x[0].size) : x }.flatten] end end bm.report 'original clean' do N.times do Hash[*hash.inject([]){|arr, (k, v)| arr + rray k ? k.zip([v]* k.size) : [k, v] }.flatten] end end bm.report 'vince' do N.times do h } for k,v in hash [*k].each {|l| h[l] } end end end bm.report 'william' do N.times do Hash[ *hash.map{|k,v| k k]; k.zip([v]*k.size) }.flatten ] end end bm.report 'daniel' do N.times do h ;hash.map{|k,v|[*k].map{|t|h[t] } end end bm.report 'robert inject' do N.times do hash.inject({}){|h,(k,v)| k.to_a.each {|x| h[x] ;h} end end bm.report 'robert inject rescue' do N.times do hash.inject({}){|h,(k,v)| k.each {|x| h[x] rescue h[k] h} end end end --Apple-Mail-2-287622042 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset -ASCII; formatwed -- Eric Hodel - drbrain / segment7.net - http://blog.segment7.net I LIT YOUR GEM ON FIRE! --Apple-Mail-2-287622042--