2016-04-03 2 views
0

У меня есть массив городов и состояний. Видать что-то вроде этого:Как добавить вторую строку массива в первую строку того же массива, ruby ​​

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

я бы в конечном счете, хотел бы получить этот результат:

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

Я сделал это тест:

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

И получил это в результате:

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

Я пытаюсь код belo ш преобразовать остальную часть массива, но получить nil в ответ:

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

Почему безумный порыв, чтобы выбрать ответ? Не менее, ответ неправильный. Когда я пишу это, вы меняете свой выбор на другой неверный ответ. Посмотрите на возвращаемые значения. Они не то, что вы сказали, что хотите в вопросе. Не меняйте свой вопрос! Я предлагаю вам убрать зеленое и подождать пару часов, чтобы пыль очистилась, затем сделайте выбор. Не существует спешки, чтобы сделать выбор. Учтите также, что некоторые читатели все еще могут работать над ответами, а другие могут не дать ответ, потому что вы уже сделали выбор. –

+1

Трудно изменить длину массива, итерации через него. Лучше избегай этого. – sawa

+2

@sawa: На самом деле длина массива не изменяется. Изменены только элементы в массиве. –

ответ

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

Ключ заключается в использовании flat_map.

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

Вы избили меня на 14 секунд. Можно ли назвать это галстуком? –

+0

Да. Я так думала. Плюс, есть небольшая разница. – sawa

+0

Мне это немного страшно. Как раз на днях моя жена сказала, что думает, что я становлюсь менее прощающим чужих ошибок, и временами была совершенно грубой. –

Смежные вопросы