2016-04-03 11 views
0

Ich habe ein Array von Städten und Staaten. Sieht aus, etwa wie folgt:Wie kann ich die zweite Zeichenfolge eines Arrays zur ersten Zeichenfolge des gleichen Arrays hinzufügen, ruby ​​

locations = ["Colorado Springs","CO","Denver","CO","Kissimmee","FL","Orlando", "FL"] 

Ich würde letztlich dieses Ergebnis lernen:

locations = ["Colorado Springs, CO","CO","Denver, CO","CO","Kissimmee, FL","FL","Orlando, FL", "FL"] 

Ich tat dies zu testen:

locations[0] << ", #{locations[1]}" 

Und bekam dies als Ergebnis:

locations = ["Colorado Springs, CO", "CO", "Denver", "CO", "Kissimmee", "FL", "Orlando", "FL"] 

Ich versuche den Code belo W den Rest der Anordnung zu konvertieren, aber nil als Antwort bekommen:

locations = ["Colorado Springs","CO","Denver","CO","Kissimmee","FL","Orlando", "FL"] 

counter0 = 0 
counter1 = 1 

while counter0 < locations.length 
    locations[counter0] << locations[counter1] 
    counter0 += 2 
    counter1 += 2 
end 

=> nil 
+1

Warum die Hetze, eine Antwort zu wählen? Nicht weniger, eine falsche Antwort. Während ich dies schreibe, haben Sie Ihre Auswahl auf eine andere falsche Antwort geändert. Sehen Sie sich die Rückgabewerte an, die beide geben. Sie sind nicht das, was du in der Frage gesagt hast. Ändere deine Frage nicht! Ich schlage vor, du ziehst den Greenie ein und warte ein paar Stunden, bis der Staub klar ist, dann wähle eine Auswahl aus. Es gibt keine Eile, um eine Auswahl zu treffen. Bedenken Sie auch, dass einige Leser möglicherweise noch an Antworten arbeiten und andere möglicherweise keine Antwort geben, weil Sie bereits eine Auswahl getroffen haben. –

+1

Es ist schwierig, die Länge eines Arrays während der Iteration zu ändern. Sie vermeiden es besser. – sawa

+2

@sawa: Tatsächlich ändert sich die Länge des Arrays nicht. Nur Elemente innerhalb des Arrays werden geändert. –

Antwort

3
locations.each_slice(2).flat_map { |city, state| ["#{city}, #{state}", state] } 
    #=> ["Colorado Springs, CO", "CO", "Denver, CO", "CO", 
    # "Kissimmee, FL", "FL", "Orlando, FL", "FL"] 
2

Der Schlüssel ist flat_map zu verwenden.

locations.each_slice(2).flat_map{|x, y| [[x, y].join(", "), y]} 
# => ["Colorado Springs, CO", "CO", "Denver, CO", "CO", "Kissimmee, FL", "FL", "Orlando, FL", "FL"] 
+1

Du schlägst mich um 14 Sekunden. Können wir es eine Krawatte nennen? –

+0

Ja. Ich dachte auch. Außerdem gibt es einen kleinen Unterschied. – sawa

+0

Ich finde es ein bisschen beängstigend. Neulich sagte meine Frau, dass sie dachte, ich würde die Fehler anderer weniger nachsichtig werden und war manchmal geradezu unhöflich. –

Verwandte Themen