Как я могу "извлечь" значения из многомерного массива умным способом?
Я использую Ruby on Rails 3.2.2 и Ruby 1.9.2.
Учитывая следующий многомерный Array
:
[["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]]
Я хотел бы получить (обратите внимание: я хотел бы "извлечь" только первое значение всех "вложенных" Array
s):
["value1", "value2", "value3"]
Как я могу сделать это умным способом?
Ответы
Ответ 1
Вы можете использовать Array#collect
для выполнения блока для каждого элемента внешнего массива. Чтобы получить первый элемент, передайте блок, который индексирует массив.
arr.collect {|ind| ind[0]}
При использовании:
arr = [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]]
=> [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]]
arr.collect {|ind| ind[0]}
=> ["value1", "value2", "value3"]
Вместо {|ind| ind[0]}
вы можете использовать Array#first
, чтобы получить первый элемент каждого внутреннего массива:
arr.collect(&:first)
Для синтаксиса &:first
прочитайте "Ruby/Ruby on Rails ampersand colour shortcut".
Ответ 2
>> array = [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]]
=> [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]]
>> array.map { |v| v[0] }
=> ["value1", "value2", "value3"]
Ответ 3
arr = [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]]
Solution1 = arr.map {|elem| elem.first}
Solution2 = arr.transpose[0]