我有一个物体,eplist,看起来像这样.
{'show' => {'name' => 'stella', 'total_seasons' => '1','episodelist' => {'season' => {'episode' => [{'epnum' => '1', 'seasonnum' => '01', 'prodnum' => '101', 'airdate' => '2005-06-28', 'title' => 'pilot'},{'epnum' => '2', 'seasonnum' => '02', 'prodnum' => '103', 'airdate' => '2005-07-05', 'title' => 'campaign'}]}}}}代表电视导游。我的愿望是迭代它,并吐出一个字符串,就像第一季,第7集:每一集的标题。
我的麻烦来自于反复的循环。我只是无法写出一组工作正常的循环!我试过了
eplist['show']['episodelist'].each do |season|
season.each do |episode|
puts episode['title']
end
end但这只是输出空行-没有错误或任何东西。尝试执行第三个.each循环,在这个循环中,它会输出它所看到的任何元素,其中每个元素都是“季节”的“undefined method”:String`‘error。
在这种情况下,我应该如何迭代这个对象?
发布于 2014-03-07 05:11:30
从您的数据结构中,尝试:
因为这是个哈希,
eplist['show']['episodelist']['season']['episode'].each do |data|
puts data['title']
# you can use the below code to get the preferred format
# puts "Season #{data['seasonnum']}, Episode #{data['epnum']}: #{data['title']}"
end发布于 2014-03-07 13:42:26
如果您想保持语法不变,则
eplist['show']['episodelist'].each do |season,episodes|
episodes['episode'].each do | episode|
puts episode['title']
end
end似乎是一种奇怪的散列结构,但可能更有意义,因为
{'show' =>
{'name' => 'stella', 'total_seasons' => '1','seasons' => [
{'season_number' => 1,'episodes' => [
{'epnum' => '1', 'seasonnum' => '01', 'prodnum' => '101', 'airdate' => '2005-06-28', 'title' => 'pilot'},
{'epnum' => '2', 'seasonnum' => '02', 'prodnum' => '103', 'airdate' => '2005-07-05', 'title' => 'campaign'}]
}]
}
}这样读起来会更好
eplist.each do |show,details|
details['seasons'].each do |season|
season['episodes'].each do |episode|
puts episode['title']
end
end
endhttps://stackoverflow.com/questions/22241982
复制相似问题