Raghu Go wrote:
I did a quick test and like Siep’s modifications…
Method1 Time elapsed: 0.236999988555908 milliseconds
Siep’s modification Method2 Time elapsed: 0.123999834060669 milliseconds
your computer must be really slow
s2@magnesium:~/temp$ cat test.rb
def method1(a)
i = 0
ret = Hash.new
a.scan(/./) {|c|
ret[c] = ret[c].nil? ? [i] : ret[c] << i
i = i + 1
}
p a
p ret
end
def method2(str) #Siep
ar = str.split("")
result = Hash.new{Array.new}
ar.each_with_index do|item,index|
result[item] = result[item]<<index
end
result.each{|k,v| puts k + " = " + v.join(",")}
end
def method3(a)
result = Hash.new{Array.new}
a.split(’’).each_with_index {|c, i| result[c] = result[c] << i}
p result
end
s2@magnesium:~/temp$ irb
irb(main):001:0> require ‘benchmark’
=> true
irb(main):002:0> include Benchmark
=> Object
irb(main):003:0> require ‘test’
=> true
irb(main):004:0> puts Benchmark.measure {method1(“abbccdaab”)}
“abbccdaab”
{“a”=>[0, 6, 7], “b”=>[1, 2, 8], “c”=>[3, 4], “d”=>[5]}
0.000000 0.000000 0.000000 ( 0.000227)
=> nil
irb(main):005:0> puts Benchmark.measure {method2(“abbccdaab”)}
a = 0,6,7
b = 1,2,8
c = 3,4
d = 5
0.000000 0.000000 0.000000 ( 0.000278)
=> nil
irb(main):006:0> puts Benchmark.measure {method3(“abbccdaab”)}
{“a”=>[0, 6, 7], “b”=>[1, 2, 8], “c”=>[3, 4], “d”=>[5]}
0.000000 0.000000 0.000000 ( 0.000209)
=> nil
irb(main):007:0>