Ich habe es versucht:
somearray = ["some", "thing"]
anotherarray = ["another", "thing"]
somearray.push(anotherarray.flatten!)
Ich erwartete
["some", "thing", "another", "thing"]
aber bekam
["some", "thing", nil]
Ich habe es versucht:
somearray = ["some", "thing"]
anotherarray = ["another", "thing"]
somearray.push(anotherarray.flatten!)
Ich erwartete
["some", "thing", "another", "thing"]
aber bekam
["some", "thing", nil]
Hier sind zwei Möglichkeiten, beachten Sie in diesem Fall, dass die erste Möglichkeit ein neues Array zuweist ( übersetzt zu somearray = somearray + anotherarray )
somearray = ["some", "thing"]
anotherarray = ["another", "thing"]
somearray += anotherarray # => ["some", "thing", "another", "thing"]
somearray = ["some", "thing"]
somearray.concat anotherarray # => ["some", "thing", "another", "thing"]
Versuchen Sie dies, es wird Ihre Arrays kombinieren und Duplikate entfernen
array1 = ["foo", "bar"]
array2 = ["foo1", "bar1"]
array3 = array1|array2
http://www.ruby-doc.org/core/classes/Array.html
Weitere Dokumentation siehe "Set Union".
In Anlehnung an die Antwort von @Pilcrow lautet die einzige geeignete Antwort für große Arrays concat
( +
), da es schnell ist und kein neues Objekt zugewiesen wird, das in einer Schleife als Müll gesammelt wird.
Hier ist der Benchmark:
require 'benchmark'
huge_ary_1 = Array.new(1_000_000) { rand(5_000_000..30_000_00) }
huge_ary_2 = Array.new(1_000_000) { rand(35_000_000..55_000_00) }
Benchmark.bm do |bm|
p '-------------------CONCAT ----------------'
bm.report { huge_ary_1.concat(huge_ary_2) }
p '------------------- PUSH ----------------'
bm.report { huge_ary_1.push(*huge_ary_2) }
end
Ergebnisse:
user system total real
"-------------------CONCAT ----------------"
0.000000 0.000000 0.000000 ( 0.009388)
"------------------- PUSH ----------------"
example/array_concat_vs_push.rb:13:in `block (2 levels) in <main>': stack level too deep (SystemStackError)
Wie Sie sehen können, verwenden push
wirft einen ERROR : stack level too deep (SystemStackError)
wenn die Arrays groß genug sind.
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.