2016-12-06 4 views
1

Ich habe einen String ersetzt:Rubin - Zeichen in einer Zeichenkette mit sequentiellen Elementen eines Arrays

a = 'bla \n bla \n bla \n' 

Und einen Array:

b = ['1', '2', '3'] 

Ich möchte die Suche durch die Zeichenfolge, und ersetzen Sie alle n-te Instanz von \ n mit den (n-1) -te Elemente aus dem Array, was zu:

a = 'bla 1 bla 2 bla 3' 

Was ist der einfachste Weg für mich, dies zu tun?

+0

Versuchen Sie, jede Permutation jeder möglichen Frage mit der gleichen Struktur, aber unterschiedliche Objekte? –

+0

Während das Thema ähnlich war, sind die Antworten völlig unterschiedlich. Einige Leute haben sich die Zeit genommen, Antworten zu geben, eine davon hat mir sehr geholfen. – Mark

Antwort

5

String#gsub mit einem Block macht kurzen Prozess diese verwenden:

a.gsub('\n') { b.shift } 

Beachten Sie, dass Array#shift das ursprüngliche Array modifiziert. Machen Sie eine Kopie davon zuerst (b.dup), wenn das ein Problem ist.

+0

Ich denke darüber nach, nett!) –

+0

Nie etwas so ordentlich erwartet, vielen Dank! – Mark

1

Sie Methode sub

a = 'bla \n bla \n bla \n' 
b = ['1', '2', '3'] 
b.each { |i| a.sub!('\n', i) } 
#> a 
#=> "bla 1 bla 2 bla 3" 
+0

Das funktioniert - vielen Dank – Mark

+0

@Mark Ihre Begrüßung) –

1

nur eine weitere Möglichkeit mit String#split und Array#zip

a.split('\n').zip(b).join 
#=> "bla 1 bla 2 bla 3" 
+0

Es sieht wie die beste Antwort auf mich aus. Kurz, auf den Punkt und zerstörungsfrei. Tut mir leid, ich habe keine Wahl mehr. –

Verwandte Themen