如何“取消”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] }