2016-07-25 23 views
2

Ich habe ein Array rangers = ["red", "blue", "yellow", "pink", "black"](es ist fraglich, dass Grün sollte ein Teil davon, aber ich beschloss, es zu weggelassen)Doppelte Array-Elemente in Ruby

ich die Array-Elemente verdoppeln wollen, damit es rangers = ["red", "red", "blue", "blue", "yellow", "yellow", "pink", "pink", "black", "black"] in dieser Reihenfolge zurückgibt .

Ich versuchte, mich umzusehen, SO, aber ich konnte keinen Weg finden, es in dieser Reihenfolge zu tun. (rangers *= 2 wird nicht funktionieren).

Ich habe auch versucht, rangers.map{|ar| ar * 2} #=> ["redred", "blueblue",...]

ich rangers << rangers #=> ["red", "blue", "yellow", "pink", "black", [...]] versucht

Wie kann ich Elemente duplizieren den doppelten Elementwert direkt neben ihm zurückzukehren? Auch, wenn möglich, würde Ich mag es n mal duplizieren, so dass, wenn n = 3, es gibt ["red", "red", "red", "blue", "blue", "blue", ...]

+1

Der grüne Ranger ** ist ** jedoch der beste. ; P –

Antwort

7

Wie wäre es

rangers.zip(rangers).flatten 

mit Array#zip und Array#flatten?

Eine Lösung, die ein bisschen besser für die zweite Anforderung verallgemeinern könnte sein könnte:

rangers.flat_map { |ranger| [ranger] * 2 } 

Enumerable#flat_map verwenden. Hier können Sie einfach die 2 durch einen beliebigen Wert oder eine Variable ersetzen.

+2

auch: '([rangers] * n) .inject (&: zip) .flatten' :) –

+0

Oh, sehr nett @ MladenJablanović. ;) –

+0

Sehr praktisch! Ich dachte nicht daran, zip + flatten Combo zu verwenden. Wird sich in Zukunft als sehr nützlich erweisen. Danke allen! – Iggy