我有一个这样的数组:
[234,235,343,445]
我想把它转换成这样的
[[234],[235],[343],[445]
ruby 1.9.2中是否有核心库函数可以帮助我快速完成这项工作?如果不是有快速的方式?
我做了一些小测试
def test1
array = []
10000000.times do
array << rand(1000000)
end
time = Time.now
array.permutation(1).to_a
puts "test1 (permutation) ---> Time = #{Time.now - time}"
end
def test2
array = []
10000000.times do
array << rand(1000000)
end
time = Time.now
array.zip()
puts "test2 (zip)---> Time = #{Time.now - time}"
end
def test3
array = []
10000000.times do
array << rand(1000000)
end
time = Time.now
array.map { |a| [a] }
puts "test3 (map) ---> Time = #{Time.now - time}"
end
test1 #test1 (permutation) ---> Time = 2.235128
test2 #test2 (zip) ---> Time = 1.537088
test3 #test3 (map) ---> Time = 2.230127
答案 0 :(得分:5)
我不认为有一个核心功能可以做到这一点,但有一个快速的方法:
irb(main):001:0> [234, 235 , 343, 445].map { |a| [a] }
=> [[234], [235], [343], [445]]
答案 1 :(得分:4)
Array#zip(没有参数)也应该这样做,尽管map
可能更直接:
telemachus $ irb
>> new = [234, 235 , 343, 445].zip() # The () is optional, .zip would work fine
=> [[234], [235], [343], [445]]
答案 2 :(得分:0)
在1.9.2中你可以这样做:
[234, 235 , 343, 445].permutation(1).to_a
答案 3 :(得分:0)
我认为你不会用这项任务快速完成任务。正如您的基准测试所示,zip是最快的方法(至少您测试过)。但是,这仍然需要创建大量的Array对象,而这只需要时间。如果你需要更快,也许你应该看看如何使用数据。没有更多相关信息,我要说的是:为什么它需要这种格式的数组?