我想遍历一个数组并为数组中的每个对象创建一个哈希值,然后将所有这些哈希值组合成一个哈希数组。
这是我的一个示例启动数组:
urls = ["http://stackoverflow.com", "http://example.com", "http://foobar.com"]
现在假设我想将每个URL的哈希值分成如下数组:
urls =[ {
'url' => "http://stackoverflow.com",
'dns_status' => "200",
'title' => "Stack Overflow"
},
{
'url' => "http://example.com",
'dns_status'=> "200",
'title' => "Example"
}
]
除了我在示例中获取dns_status
和title
键的值之外,我想我缺少的是如何遍历原始数组并为每个对象创建哈希...
我玩inject
,collect
,map
和each
并阅读文档,但无法理解或获取任何内容工作
有什么建议吗?这会更容易用课程完成吗?
修改
感谢大家的帮助。想出来并让它运作起来。干杯!
答案 0 :(得分:4)
对可枚举的每个元素执行某些操作并将结果存储在数组中:这就是map的作用。在块中指定所需内容,如下所示:
urls = ["http://stackoverflow.com", "http://example.com", "http://foobar.com"]
p res = urls.map{|url| {"url"=>url, "dns_status"=>200, "title"=>url[7..-5]} }
#=> [{"url"=>"http://stackoverflow.com", "dns_status"=>200, "title"=>"stackoverflow"}, {"url"=>"http://example.com", "dns_status"=>200, "title"=>"example"}, {"url"=>"http://foobar.com", "dns_status"=>200, "title"=>"foobar"}]
答案 1 :(得分:0)
“我缺少的是如何遍历原始数组并为每个对象创建一个哈希......”
urls = [
"http://stackoverflow.com",
"http://example.com",
"http://foobar.com"
]
urls.each {|entry|
puts entry
}
例如,您可以使用 .map!。但我仍然不确定你的目标结果应该是什么。怎么样?
urls.map! {|entry|
{ 'url' => entry, 'dns_status' => "200", 'title' => "Stack Overflow"}
}
urls # => [{"url"=>"http://stackoverflow.com", "dns_status"=>"200", "title"=>"Stack Overflow"}, {"url"=>"http://example.com", "dns_status"=>"200", "title"=>"Stack Overflow"}, {"url"=>"http://foobar.com", "dns_status"=>"200", "title"=>"Stack Overflow"}]
哎呀,结果很难看出来。就是这样:
[
{
"url"=>"http://stackoverflow.com",
"dns_status"=>"200",
"title"=>"Stack Overflow"
},
{
"url"=>"http://example.com",
"dns_status"=>"200",
"title"=>"Stack Overflow"
},
{
"url"=>"http://foobar.com",
"dns_status"=>"200",
"title"=>"Stack Overflow"
}
]
显然,你还需要提供适当的标题内容, 但你没有在原来的问题中给出这个,所以我不能 填写它。