Ruby循环数组并为每个数组对象创建哈希

时间:2014-07-16 16:13:40

标签: ruby arrays hash

我想遍历一个数组并为数组中的每个对象创建一个哈希值,然后将所有这些哈希值组合成一个哈希数组。

这是我的一个示例启动数组:

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_statustitle键的值之外,我想我缺少的是如何遍历原始数组并为每个对象创建哈希...

我玩injectcollectmapeach并阅读文档,但无法理解或获取任何内容工作

有什么建议吗?这会更容易用课程完成吗?

修改

感谢大家的帮助。想出来并让它运作起来。干杯!

2 个答案:

答案 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"
}
]

显然,你还需要提供适当的标题内容, 但你没有在原来的问题中给出这个,所以我不能 填写它。

相关问题