2015-10-28 5 views
3

Итак, я знаю, что вы можете перемещаться по 2D-массив с чем-то вродеКак перемещаться по каждому элементу массива 2D?

arr1.each do |a1| 
    a1.each do |a2| 
    puts a2 

однако, что я пытаюсь сделать, это немного по-другому. У меня есть 2 набора значений, хранящихся в массивах, и я хочу иметь возможность их циклически перемещать и заполнять раскрывающееся меню из информации.

Так у меня есть данные, как:

names = ["bob", "frank", "tim"] 
id = [1, 2, 3] 

, который получает возвращается в массив из метода, как это:

def method_name 
    #stuff 
    return names, id 
end 

То, что я хочу быть в состоянии сделать с точки зрения является на паре соответствующие индексы друг с другом. Итак, для приведенного выше примера bob-1frank-2tim-3 Я не могу понять, как это понять. Я попробовал срез и вложенные петли, а также попытался с возвратом хеша вместо массива. Я потерялся.

Если у кого-то есть информация о том, как вытащить информацию так, как я пытаюсь это сделать, или другой более простой способ сделать это, я был бы очень благодарен за ввод.

+0

Вы должны проверить ответ Натана. Это больше Rubyish. – seph

ответ

0

Это редкий случай, в Ruby, где итерация по индексу полезно:

(0...names.size).map do |idx| 
    "#{names[idx]}-#{id[idx]}" 
end 
+0

Вы, сэр/мэм, - герой. Раньше я даже не знал о методе карты. Я рад, что спросил, потому что моя головная боль уже меньше ха-ха. Еще раз спасибо @seph! –

2

names.zip(id).map { |e| e.join('-') }

zip объединяет два массива в массив массивов, как это:

[['bob', 1], ['frank', 2], ['tim', 3]]

map проходит через каждый из трех элементов внешней матрицы и имеет verts каждый внутренний массив в строку, соединяя его два элемента вместе с тире, используя join.

См. zip, map и join документация.

Вообще говоря, при исследовании манипуляций с массивами в Ruby вы захотите посмотреть документы как для Array, так и для документов для Enumerable.

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