【问题标题】:Iterate an array through arrays and hashes in Ruby on Rails在 Ruby on Rails 中通过数组和散列迭代数组
【发布时间】:2012-12-01 09:35:18
【问题描述】:

假设我有这些数据:

[{"sku"=>"reprint"}, [], nil, {"quantity"=>"1"}, [], nil, {"shippingOptions"=>"PQRS"},
[{"option"=>"PQRS"}], nil, {"abc"=>"abcccc"}, 
[], nil,{"sku"=>"poster"}, 
[], nil, {"quantity"=>"2"}, [], nil, {"shippingOptions"=>"MNLIJK"},
[{"option"=>"MNL"}, {"option"=>"IJK"}], nil, {"sku"=>"cards"}, 
[], nil, {"quantity"=>"5"},
[], nil, {"shippingOptions"=>"DEFABC"}, [{"option"=>"DEF"}, {"option"=>"ABC"}], nil] 

我想迭代这些数据并使用 Ruby on Rails 以适当的格式将其打印为 html 我是这项技术的新手。任何帮助表示赞赏!

【问题讨论】:

  • 使用 each 循环遍历数据并输出它...如果您想了解有关某个步骤的更多信息,请向我们展示您拥有的内容并提供有关您的应用程序的更多详细信息。
  • 也许您可以告诉我们您希望此数据的输出结果
  • proper format 对你来说是什么?
  • 感谢大家的回复..但我不知道迭代这个内部细节..我希望他们每个人都显示在一个单独的行中与键值对..请帮助我迭代这个..因为我在外部数组中有 Array 和 Hash,..我如何将它们一起迭代?

标签: ruby-on-rails


【解决方案1】:

.flatten 在这里可能很方便。如果您不关心结构,我会在迭代之前将其展平,那么您不必担心深度变化。

1.9.3p194 :001 > root = [{"sku"=>"reprint"}, [], nil, {"quantity"=>"1"}, [], nil, {"shippingOptions"=>"PQRS"},
1.9.3p194 :002 >     [{"option"=>"PQRS"}], nil, {"abc"=>"abcccc"}, 
1.9.3p194 :003 >     [], nil,{"sku"=>"poster"}, 
1.9.3p194 :004 >     [], nil, {"quantity"=>"2"}, [], nil, {"shippingOptions"=>"MNLIJK"},
1.9.3p194 :005 >     [{"option"=>"MNL"}, {"option"=>"IJK"}], nil, {"sku"=>"cards"}, 
1.9.3p194 :006 >     [], nil, {"quantity"=>"5"},
1.9.3p194 :007 >     [], nil, {"shippingOptions"=>"DEFABC"}, [{"option"=>"DEF"}, {"option"=>"ABC"}], nil]
 => [{"sku"=>"reprint"}, [], nil, {"quantity"=>"1"}, [], nil, {"shippingOptions"=>"PQRS"}, [{"option"=>"PQRS"}], nil, {"abc"=>"abcccc"}, [], nil, {"sku"=>"poster"}, [], nil, {"quantity"=>"2"}, [], nil, {"shippingOptions"=>"MNLIJK"}, [{"option"=>"MNL"}, {"option"=>"IJK"}], nil, {"sku"=>"cards"}, [], nil, {"quantity"=>"5"}, [], nil, {"shippingOptions"=>"DEFABC"}, [{"option"=>"DEF"}, {"option"=>"ABC"}], nil] 
1.9.3p194 :008 > root.flatten!
 => [{"sku"=>"reprint"}, nil, {"quantity"=>"1"}, nil, {"shippingOptions"=>"PQRS"}, {"option"=>"PQRS"}, nil, {"abc"=>"abcccc"}, nil, {"sku"=>"poster"}, nil, {"quantity"=>"2"}, nil, {"shippingOptions"=>"MNLIJK"}, {"option"=>"MNL"}, {"option"=>"IJK"}, nil, {"sku"=>"cards"}, nil, {"quantity"=>"5"}, nil, {"shippingOptions"=>"DEFABC"}, {"option"=>"DEF"}, {"option"=>"ABC"}, nil]  
1.9.3p194 :011 > root.each do |r| 
1.9.3p194 :012 >     next if r.nil?
1.9.3p194 :013?>     puts r.to_s
1.9.3p194 :014?> end
{"sku"=>"reprint"}
{"quantity"=>"1"}
{"shippingOptions"=>"PQRS"}
{"option"=>"PQRS"}
{"abc"=>"abcccc"}
{"sku"=>"poster"}
{"quantity"=>"2"}
{"shippingOptions"=>"MNLIJK"}
{"option"=>"MNL"}
{"option"=>"IJK"}
{"sku"=>"cards"}
{"quantity"=>"5"}
{"shippingOptions"=>"DEFABC"}
{"option"=>"DEF"}
{"option"=>"ABC"}

回复:cmets。

data = [{"sku"=>"reprint"}, [], nil, {"quantity"=>"1"}, [], nil, {"shippingOptions"=>"PQRS"}, [{"option"=>"PQRS"}], nil, {"abc"=>"abcccc"}, [], nil, {"sku"=>"poster"}, [], nil, {"quantity"=>"2"}, [], nil, {"shippingOptions"=>"MNLIJK"}, [{"option"=>"MNL"}, {"option"=>"IJK"}], nil, {"sku"=>"cards"}, [], nil, {"quantity"=>"5"}, [], nil, {"shippingOptions"=>"DEFABC"}, [{"option"=>"DEF"}, {"option"=>"ABC"}], nil]
hash_collection = data.flatten.map(&:to_a).flatten(1).reduce({}) { |h,(k,v)| (h[k] ||= []) << v; h}

产生:

=&gt; {"sku"=&gt;["reprint", "poster", "cards"], "quantity"=&gt;["1", "2", "5"], "shippingOptions"=&gt;["PQRS", "MNLIJK", "DEFABC"], "option"=&gt;["PQRS", "MNL", "IJK", "DEF", "ABC"], "abc"=&gt;["abcccc"]}

我实际上希望我的新数据是这样的:

{{"sku"=>"Reprint"},{"quantity"=>"1"},{"option"=>"PQRS"}}
{{"sku"=>"Poster"},{"quantity"=>"2"},{"option"=>"MNL"},{"option"=>"IJK"}}
{{"sku"=>"Cards"}, {"quantity"=>"5"},{"option"=>"DEF"},{"option"=>"ABC"}}
{{"sku"=>"Books"},{"quantity"=>"6"},{"option"=>"QIU"},{"option"=>"PSJ"},   option"=>"IQA"},{"suboption"=>"ikh"},{"subsuboption"=>"uuuuuuuuuuuuuuuuu"}}

【讨论】:

  • 如果我想对特定的东西进行分组并打印,那么我该怎么做呢?例如,我想将 sku、数量、选项组合在一起。任何帮助表示赞赏
  • 在您的展平阵列上:data.map(&amp;:to_a).flatten(1).reduce({}) { |h,(k,v)| (h[k] ||= []) &lt;&lt; v; h}。归功于this fella
  • 我现在得到这样的数据 {"option"=>[nil], "PQRS"=>[nil]} {"sku"=>[nil], "Reprint"=>[ nil]} {"数量"=>[nil], "1"=>​​[nil]} {"option"=>[nil], "MNL"=>[nil]} {"option"=>[nil] , "IJK"=>[nil]} {"sku"=>[nil], "海报"=>[nil]} {"数量"=>[nil], "2"=>[nil]} {" option"=>[nil], "DEF"=>[nil]} {"option"=>[nil], "ABC"=>[nil]}
猜你喜欢
  • 1970-01-01
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
相关资源
最近更新 更多