2012-12-13 116 views
1

可以说我有这样的数据:迭代通过数组和哈希阵列,Ruby on Rails的

[{"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] 

我想重复这个数据和on Rails的 我使用Ruby以适当的格式打印在HTML这是新技术。任何帮助表示赞赏!

+0

使用'each'遍历数据和输出迭代它...如果您想要了解更多关于某个步骤的信息,请向我们展示您的具体内容,并在您的应用程序中提供更多详细信 – Veger

+2

也许你可以让我们知道你对这些数据的期望输出 – alexsanford1

+4

什么是适合你的格式? –

回答

2

.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"} 

RE:comments。

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} 

生产:

=> {"sku"=>["reprint", "poster", "cards"], "quantity"=>["1", "2", "5"], "shippingOptions"=>["PQRS", "MNLIJK", "DEFABC"], "option"=>["PQRS", "MNL", "IJK", "DEF", "ABC"], "abc"=>["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"}} 
+0

美丽......!我不知道这个平坦..谢谢你的帮助.. – unknown

+0

如果我想分组特定的东西和打印,那么我将如何能够做到这一点?例如,我想将sku,数量,选项组合在一起..任何帮助表示赞赏 – unknown

+0

在您的展平数组上: K,v)| (h [k] || = [])<< v; H}'。信用[这家伙](http://stackoverflow.com/a/5491741/1520714)。 –