gpt4 book ai didi

ruby-on-rails - 遍历Hash输出无序列表

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:18 28 4
gpt4 key购买 nike

我有一个散列,其中大部分由一个键和两个与该键关联的值填充。此哈希中还有另一个哈希,这是我被卡住的地方。

假设哈希看起来像:

{'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 是否是哈希,但它的设置方式欺骗了我。我认为如果我每次都知道散列会是什么样子会更容易,但每次都会是一个新的散列。一次可能在数据中有一个 holiday,而另一次可能同时有 holidaygenre

如有任何建议,我们将不胜感激。

最佳答案

您需要创建具有正确格式的散列。像这样:

hash = {'sports'=>['football', 'basketball'], 'season'=>['summer','fall'], 'data'=>[{'holiday'=>'Christmas', 'genre' => 'Comedy'}, {'holiday'=>'Thanksgiving', 'genre' => 'Action'}]}
formatted_data = hash.dup

data = formatted_data.delete('data')
if data
data.each do |item|
item.each do |k, v|
formatted_data[k] ||= []
formatted_data[k] << v
end
end
end

puts formatted_data
# => {"sports"=>["football", "basketball"], "season"=>["summer", "fall"],
# => "holiday"=>["Christmas", "Thanksgiving"], "genre"=>["Comedy", "Action"]}

content_tag(:ul) do
formatted_data.map do |key, values|
#... your code here...
end.join.html_safe
end.html_safe

关于ruby-on-rails - 遍历Hash输出无序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27300273/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com