Извлечение информации из хеша внутри хеша - ruby - PullRequest
0 голосов
/ 21 сентября 2010

У меня быстрый вопрос по извлечению информации из хеша, вот код на данный момент:

permits_sheet.each do |row|
  rate_type = row[0].to_s #Converts the rate type (title) to a string
  row.shift #Removes the title from hash so it's not added to values
  row.each do |values|
    split_value = values.split ('=') #References relations from an excel sheet pulled in earlier. EG: T=2324, W=8633
    (@@permits_hash[rate_type] ||= []) << {split_value[0].to_s => split_value[1]} #Multiple values exist within each title
  end
end

puts @@permits_hash['R']['T'] #In this example I'm searching for the hash key of T under the R title. I expected it to return the 2324 from the example above.

При попытке получить информацию таким способом это приводит к ошибке. Я уверен, что только что сделал что-то глупое, но любая помощь будет принята с благодарностью (не использовал Ruby довольно давно).

Спасибо за помощь!

1 Ответ

2 голосов
/ 21 сентября 2010

Как насчет того, чтобы хранить хеш-коды не в массиве, а как вложенный хеш-код?

(@@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"}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...