Как разделить один массив уровней на несколько массивов в Ruby 1.9.2 - PullRequest
2 голосов
/ 22 августа 2010

У меня есть такой массив:

[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

Ответы [ 4 ]

5 голосов
/ 22 августа 2010

Не думаю, что для этого есть основная функция, но есть быстрый способ:

irb(main):001:0> [234, 235 , 343, 445].map { |a| [a] }
=> [[234], [235], [343], [445]]
4 голосов
/ 22 августа 2010

Array # zip (без аргументов) тоже должен это делать, хотя map, вероятно, более прост:

telemachus $ irb
>> new = [234, 235 , 343, 445].zip() # The () is optional, .zip would work fine
=> [[234], [235], [343], [445]]
0 голосов
/ 22 августа 2010

Не думаю, что вы справитесь с этой задачей так быстро. Как показывает ваш тест, zip - самый быстрый метод (который вы тестировали по крайней мере). Тем не менее, для этого нужно создать огромное количество объектов Array, и это займет время. Если вам нужно, чтобы это было быстрее, возможно, вам стоит посмотреть, как используются данные. Без дополнительной информации об этом мне остается только сказать: зачем ему массив в этом формате?

0 голосов
/ 22 августа 2010

В 1.9.2 вы можете сделать:

[234, 235 , 343, 445].permutation(1).to_a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...