如何“取消”Ruby数组?

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

[5, 7, 8, 1] 

进入这个:

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

什么是最好的方式?

我现在这样做:

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

但是我收到以下错误:

警告:默认`to_a’将过时

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

在此先感谢您的问候!

最短最快的解决方案是使用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] } 

无点式:

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

试试这个:

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

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

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

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

你可以这样做:

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