Pytałeś o dobrej sposób to zrobić, więc odpowiedź brzmi: sposób, że można lub współpracownik zrozumieć i utrzymania sześć miesięcy od teraz.
Po pierwsze, potrzebujesz Hash with autovivification, ponieważ tworzysz zagnieżdżoną strukturę skrótu. Jest to bardzo przydatna kodowania wzór, który uprości kod aplikacji:
# Copied & pasted from the question
old_hash = { :ie0 => "Hi", :ex0 => "Hey", :eg0 => "Howdy", :ie1 => "Hello", :ex1 => "Greetings", :eg1 => "Good day"}
# Auto-vivify
new_hash = Hash.new { |h, k| h[k] = { } }
Następnie można pętli istniejących kluczy w tym prostym stylu, wyrwanie się z części każdego klawisza, i korzystania z nich, aby zapisać wartość w nowej hash:
old_hash.each_pair do |key, value|
key =~ /^(..)(.)$/ # Make a regex group for each string to parse
new_hash[$2][$1] = value # The regex groups become the new hash keys
end
puts new_hash
uzyskać ten wynik:
{"0"=>{"ie"=>"Hi", "ex"=>"Hey", "eg"=>"Howdy"}, "1"=>{"ie"=>"Hello", "ex"=>"Greetings", "eg"=>"Good day"}}
Na początek spróbuj: a.group_by {| e | e [0] [/ \ d /]} – Mason
Dobra wskazówka, dzięki. – tvalent2