【问题标题】:Ruby each multi array [closed]Ruby每个多数组[关闭]
【发布时间】:2014-06-03 02:26:50
【问题描述】:
web_user_agents = {
    "linux" => [
            "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.5) Gecko/2008122903 Gentoo Iceweasel/3.0.5",
            "Opera/5.0 (Linux 2.0.38 i386; U) [en]",
    ],
    "windows" => [
            "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9.2a1pre) Gecko",
            "Opera/9.63 (Windows NT 5.2; U; en) Presto/2.1.1",
    ],
}

如何使用 key 迭代每个元素?

预期的输出是:

"linux","Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.5) Gecko/2008122903 Gentoo Iceweasel/3.0.5"
"linux","Opera/5.0 (Linux 2.0.38 i386; U) [en]"
"windows","Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9.2a1pre) Gecko"
"windows","Opera/9.63 (Windows NT 5.2; U; en) Presto/2.1.1",

【问题讨论】:

标签: ruby arrays


【解决方案1】:

你可以遍历哈希

web_user_agents.map { |k,v| v.map { |val| [k, val] } }.flatten

#=>[
#=> "linux","Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.5) Gecko/2008122903 Gentoo Iceweasel/3.0.5"
#=> "linux","Opera/5.0 (Linux 2.0.38 i386; U) [en]"
#=> "windows","Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9.2a1pre) Gecko"
#=> "windows","Opera/9.63 (Windows NT 5.2; U; en) Presto/2.1.1"
#=>]

【讨论】:

  • 一个班轮+1。我只是这样想着同样的事情。 web_user_agents.map{|k,v| [k].cycle(v.count).zip(v)}.flatten(1) 所以他会有一个键值对数组。
【解决方案2】:

假设您真的不想在最后一行使用终止逗号,请尝试:

web_user_agents.keys.each do |agent|
    web_user_agents[agent].each do |line|
        puts %Q("#{agent}","#{line}")
    end
end

请注意,哈希是以不确定的顺序存储的;如果键的产生方式对您很重要,您可能需要对它们进行排序,或者使用数组而不是散列来存储它们。

[编辑:在最新版本的 Ruby 中,哈希键顺序被保留。]

【讨论】:

【解决方案3】:

以下循环遍历主哈希。

 web_user_agents.each_pair do |k,v| 
   puts "#{k} => #{v}"
 end

你可以这样嵌套:

 web_user_agents.each_pair do |k,v|
   v.each do |value|
      puts "#{k} => #{value}"
   end
 end

【讨论】:

  • 这不会产生预期的输出。
  • 我认为 OP 能够自行格式化输出!
  • 如果 OP 是您的项目负责人并且您被要求以特定方式格式化输出,您会说吗?既然按照要求做起来那么容易,为什么还要做不同的事情呢?
猜你喜欢
  • 2013-06-14
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
相关资源
最近更新 更多