2 Stimmen

Wie man ein Level-Array in mehrere Arrays in Ruby 1.9.2 aufteilt

Ich habe ein Array wie dieses:

[234, 235 , 343, 445]

Ich möchte es so umwandeln, dass es wie folgt aussieht

[[234],[235],[343],[445]]

Gibt es Kernbibliothek Funktion in Ruby 1.9.2 könnte mir helfen, dies schnell zu tun? und wenn nicht gibt es einen schnellen Weg?


Ich habe einen kleinen Test durchgeführt

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

5voto

Nicolas Viennot Punkte 3825

Ich glaube nicht, dass es dafür eine Kernfunktion gibt, aber es gibt einen schnellen Weg:

irb(main):001:0> [234, 235 , 343, 445].map { |a| [a] }
=> [[234], [235], [343], [445]]

4voto

Telemachus Punkte 18969

Array#Zip (ohne Argumente) sollte dies ebenfalls tun, obwohl die map ist wahrscheinlich unkomplizierter:

telemachus $ irb
>> new = [234, 235 , 343, 445].zip() # The () is optional, .zip would work fine
=> [[234], [235], [343], [445]]

0voto

ennuikiller Punkte 44945

In 1.9.2 können Sie das tun:

[234, 235 , 343, 445].permutation(1).to_a

0voto

AboutRuby Punkte 7806

Ich glaube nicht, dass Sie mit dieser Aufgabe so schnell vorankommen werden. Wie Ihr Benchmark nahelegt, ist zip die schnellste Methode (die Sie zumindest getestet haben). Allerdings muss dabei immer noch eine riesige Menge an Array-Objekten erstellt werden, und das wird einfach Zeit kosten. Wenn es schneller gehen soll, sollten Sie sich vielleicht ansehen, wie die Daten verwendet werden. Ohne weitere Informationen darüber, ist alles, was ich zu sagen habe: Warum braucht es ein Array in diesem Format?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X