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]
Sie haben eine brauchbare Idee, aber die #flatten!
ist an der falschen Stelle - er flacht den Empfänger ab, so dass man ihn zum Drehen verwenden könnte [1, 2, ['foo', 'bar']]
in [1,2,'foo','bar']
.
Zweifellos habe ich einige Ansätze vergessen, aber Sie können verketten :
a1.concat a2
a1 + a2 # creates a new array, as does a1 += a2
o vorangestellt/angehängt :
a1.push(*a2) # note the asterisk
a2.unshift(*a1) # note the asterisk, and that a2 is the receiver
o Spleiß :
a1[a1.length, 0] = a2
a1[a1.length..0] = a2
a1.insert(a1.length, *a2)
o anhängen und platt machen :
(a1 << a2).flatten! # a call to #flatten instead would return a new array
Sie können einfach die +
Betreiber!
irb(main):001:0> a = [1,2]
=> [1, 2]
irb(main):002:0> b = [3,4]
=> [3, 4]
irb(main):003:0> a + b
=> [1, 2, 3, 4]
Alles über die Array-Klasse können Sie hier nachlesen: http://ruby-doc.org/core/classes/Array.html
Der sauberste Ansatz ist die Verwendung der Array#concat Methode; es wird kein neues Array erstellt (im Gegensatz zu Array#+, das das Gleiche tut, aber ein neues Array erstellt).
Direkt aus den Unterlagen ( http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-concat ):
concat(andere_ary)
Hängt die Elemente von other_ary an self an.
Also
[1,2].concat([3,4]) #=> [1,2,3,4]
Array#concat wird ein mehrdimensionales Array nicht glätten, wenn es als Argument übergeben wird. Sie müssen das separat behandeln:
arr= [3,[4,5]]
arr= arr.flatten #=> [3,4,5]
[1,2].concat(arr) #=> [1,2,3,4,5]
Schließlich können Sie auch unser Corelib-Gem verwenden ( https://github.com/corlewsolutions/corelib ), die den Ruby-Kernklassen nützliche Helfer hinzufügt. Insbesondere haben wir eine Array#add_all Methode, die mehrdimensionale Arrays vor der Ausführung der Verknüpfung automatisch glättet.
a = ["some", "thing"]
b = ["another", "thing"]
Zum Anhängen b
a a
und speichern das Ergebnis in a
:
a.push(*b)
o
a += b
In jedem Fall, a
wird:
["some", "thing", "another", "thing"]
aber im ersten Fall sind die Elemente von b
werden an die bestehenden a
Array, und im letzteren Fall werden die beiden Arrays miteinander verkettet und das Ergebnis wird in a
.
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.