如何“取消”Ruby数组?

时间:2011-08-05 21:35:47

标签: ruby arrays

我目前正在尝试转换此ruby数组:

[5, 7, 8, 1]

进入这个:

[[5], [7], [8], [1]]

最好的方法是什么?

我目前正在这样做:

[5, 7, 8, 1].select { |element| element }.collect { |element| element.to_a }

但是我收到以下错误:

警告:默认`to_a'将过时

我做错了什么? 您能否就如何做到这一点提出建议?

提前致谢和最诚挚的问候!

5 个答案:

答案 0 :(得分:28)

最短且最快的解决方案是使用Array#zip

values = [5, 7, 8, 1]
values.zip # => [[5], [7], [8], [1]]

另一种可爱的方式是使用transpose

[values].transpose # =>  [[5], [7], [8], [1]]

最直观的方式可能是@Thom建议的:

values.map{|e| [e] }

答案 1 :(得分:17)

无点式:

[5, 7, 8, 1].map(&method(:Array))

答案 2 :(得分:11)

试试这个:

[5, 7, 8, 1].map {|e| [e]}

答案 3 :(得分:3)

你所做的事情没有什么特别的错误。我认为他们的意思是,对于FixNum的to_a将在未来的某个时候被弃用,这是有道理的,因为它对于FixNum应该做什么来确定to_a是不明确的。

您可以像这样重写您的行,这将消除错误:

[5, 7, 8, 1].select { |element| element }.collect { |element| [element] }

答案 4 :(得分:1)

你可以这样做:

[5, 7, 8, 1].collect { |i| [i] }