我目前正在尝试转换此ruby数组:
[5, 7, 8, 1]
进入这个:
[[5], [7], [8], [1]]
最好的方法是什么?
我目前正在这样做:
[5, 7, 8, 1].select { |element| element }.collect { |element| element.to_a }
但是我收到以下错误:
警告:默认`to_a'将过时
我做错了什么? 您能否就如何做到这一点提出建议?
提前致谢和最诚挚的问候!
答案 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] }