Как насчет того, чтобы хранить хеш-коды не в массиве, а как вложенный хеш-код?
(@@permits_hash[rate_type] ||= {})[split_value[0].to_s]=split_value[1]]
Не то, чтобы это помогало читабельности, но я на самом деле думаю, что вы можете написать два цикла в виде одной строки.
@@permits_hash=Hash.new
row=["title","k1=v2","k2=v2","k3=v3"]
# Here's the line replacing the two loops
(@@permits_hash[row.shift] ||= {}).update(Hash[*row.map{|v| v.split("=")}.flatten])
>> @@permits_hash
=> {"title"=>{"k1"=>"v2", "k2"=>"v2", "k3"=>"v3"}}