2012-03-07 227 views
0

我想学Ruby,阵列给我一些麻烦。 我有输入,我平坦的模式"name, number, name, number"。然后我想创建一个2元素数组的数组,每个数组包含一个名称和下一个数字。红宝石阵列麻烦

当我将这些2元素数组推入另一个数组时,似乎会自动变平整为0维数组。我想要的最终数组的大小为[N/2][2],N是输入中的名称或数字的数量。

http://pastie.org/3542269

puts与评论不会发生,直到所有从对数组中的元素已经打印,所以它看起来是这样的:

Name 
1 
Name 
2 
Name 
3 

当我预计:

Name 
1 

Name 
2 

Name 
3 

我想我的问题是:

  • 我该如何将数组放入数组中,以制作一个锯齿状的数组?
  • 如何跟踪我的数组在Ruby中的维数?当你必须声明一个尺寸时,它会容易得多。

回答

4
some_array = [[["Name 1", "value 1"], ["Name 2", "value 2"]], [["Name 3", "value 3"], ["Name 4", "value 4"]]] 

array = some_array.flatten 
new_array = array.each_slice(2).map do |a, b| 
    [a,b] 
end 
#=> [["Name 1", "value 1"], 
#=> ["Name 2", "value 2"], 
#=> ["Name 3", "value 3"], 
#=> ["Name 4", "value 4"]] 

这类似于some_array.flatten(1)

+0

我从来不知道'each_slice',谢谢! – 2012-03-07 16:59:30