2007/8/17, Christian <ozric / web.de>: > I have a lot of files in an folder and want loop over the files in a > special way: > > Dir.entries("f:/test/").each { |e| filenames.push(e[3..50])} > > Now i have an array with the distinct names like: > a.txt > b.txt > c.txt > d.txt > ... > z.txt > > , but every file "have 20 parts" which i have to proceed: > 00_a.txt > 01_a.txt > 02_a.txt > .. > 19_a.txt > > > for i in 0..19 > filenames.map{ |t| if i < 10 then p "0#{i}_#{t}" else p > "#{i}_#{t}" end } > end > > > I find something about MultiValuedHash, but i didn't know how i get my > structure (....the distinct names are the keys and the 20 parts for > every key as values ) like the raw_data in an easy way. > > raw_data=[[1,'a'],[1,'b'],[1,'c'],[2,'a'],[2,['b','c']], > [3,'c']] > > class MultiValuedHash < Hash > def []=(key,value) > if has_key?(key) > super(key,[value,self[key]].flatten) > else > super > end > end > end > > hash=MultiValuedHash.new > raw_data.each{ |x,y| hash[x]=y } This is shorter and more efficient: hash = Hash.new {|h,k| h[k] = []} raw_data.each{ |x,y| hash[x] << y } And you even do not need a new class. :-) Kind regards robert