为什么可以';我不能从这个Ruby哈希访问一个项目吗?
我的数据结构如下所示:为什么可以';我不能从这个Ruby哈希访问一个项目吗?,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我的数据结构如下所示: @results['events'].each do |event| event.inspect end ["event", {"modified"=>"2011-03-04 12:39:13", "groups"=>nil, "country_name"=>"United States", "city_name"=>"Morrison", "latitude"=>39.653992, "title"=>"Red Rocks Ind
@results['events'].each do |event|
event.inspect
end
["event", {"modified"=>"2011-03-04 12:39:13", "groups"=>nil, "country_name"=>"United States", "city_name"=>"Morrison", "latitude"=>39.653992, "title"=>"Red Rocks Indian Art Show", "region_name"=>"Colorado"}]
@results['events']['event'].each do |event|
event['modified']
end
或
我想我可以做这样的事情:
@results['events'].each do |event|
event.inspect
end
["event", {"modified"=>"2011-03-04 12:39:13", "groups"=>nil, "country_name"=>"United States", "city_name"=>"Morrison", "latitude"=>39.653992, "title"=>"Red Rocks Indian Art Show", "region_name"=>"Colorado"}]
@results['events']['event'].each do |event|
event['modified']
end
但当我这样做时,我得到了:
无法在包含以下内容的行上将字符串转换为整数:event['modified']
我做错了什么?
inspect
返回一个字符串each
丢弃从块返回的值,所以实际上您在输出中看到的是对象的值,在该值上调用了each
。使用p obj
打印obj
您会得到“无法将字符串转换为整数”,因为如果您调用散列
实例上的每个
,并将单个参数块传递给它,则会使用表示键值对的数组调用此块(如[键,值]
)。在event['modified']
中,您试图使用String
索引从数组中获取一个值。数组只接受整数索引,因此Ruby尝试进行转换,但失败
你想要的是
@results['events']['event'].each do |eventProperty, eventPropertyValue|
# do something here
end
Rails只允许数组使用数字索引 尝试按如下方式重新构造数据结构:
events = [
{
:name => "event",
:modified => "2011-03-04 12:39:13",
:groups => nil,
:country_name => "United States",
:city_name => "Morrison",
:latitude => 39.653992,
:title => "Red Rocks Indian Art Show",
:region_name => "Colorado"
}
]
有一个散列数组更有意义:每个事件一个散列。另外,使用符号作为散列键更干净、更有效
希望有帮助。Ok,我发现在上面的第一个代码片段中,我可以执行一个event1=event[1],然后执行event1['modified'],并获取该哈希元素。有人能给我解释一下为什么第二段没有给我一个好的散列吗?ruby初学者问题散列中四分之三的单词是多余的。1) 底部的ruby标记表示这是一个ruby问题。2) 这里没有说明是初学者还是高级。3) 一切都是一个问题。有关如何调试代码的提示,您可能想阅读感谢您的提示,但这是我遵循的外部API,似乎不是最好的实现。