我有一个哈希,其中大部分填充了一个与该关键字相关联的两个值的关键字。在这个哈希中还有另一个哈希,这是我被卡住的地方。通过散列迭代输出一个无序列表
比方说散的样子:
{'sports'=>['football', 'basketball'], 'season'=>['summer','fall'], 'data'=>[{'holiday'=>'Christmas', 'genre' => 'Comedy'}, {'holiday'=>'Thanksgiving', 'genre' => 'Action'}]}
输出应该是这样的:
Sports
- football
- basketball
Season
- summer
- fall
Holiday
- Christmas
- Thanksgiving
Genre
- Comedy
- Action
到目前为止,我有一个助手,让我除了data
部分的一切。
def output_list_from(hash)
return if hash.empty?
content_tag(:ul) do
hash.map do |key, values|
content_tag(:li, key.to_s.humanize) +
content_tag(:ul) do
# if values.is_a?(Hash)...
content_tag(:li, values.first) +
content_tag(:li, values.last)
end
end.join.html_safe
end.html_safe
end
这将返回输出:
Sports
- football
- basketball
Season
- summer
- fall
Data
- {'holiday'=>'Christmas', 'genre' => 'Comedy'}
- {'holiday'=>'Thanksgiving', 'genre' => 'Action'}
这当然是有道理的......所以我试着在循环来检查value
是一个Hash,但这样它的成立欺骗了我。我认为如果我知道每次散列的样子会更容易,但每次都会有新的散列。有一次,数据内可能有holiday
,另一次可能有holiday
和genre
。
任何意见,将不胜感激。
总是在'data'哈希值的阵列? – 2014-12-04 17:37:16
'数据'不总是*在散列中。如果'data'存在,那么是的,它将是一个散列数组。 – 2014-12-04 17:38:23