Сделать массив из списка, где первый элемент массива является первым элементом в списке - PullRequest
2 голосов
/ 16 октября 2019

Я очень новичок в ruby, так что извините, если это основной вопрос.

У меня есть список, который выглядит так:

    [name, max, john, raj, sam]

И я хочу создать новый массив, который будет выглядеть так:

    [[name, max], [name, john], [name, raj], [name, sam]]

Вот чтоя пытаюсь сделать:

    row.xpath('td').each_with_index do |cell, index|
     if index == 0
      tarray['name'] << cell.text
     else
      tarray['values'] << cell.text
    end

Я знаю, что делаю это неправильно, потому что когда у меня есть ['name'], логически невозможно будет иметь ['values']. Пожалуйста, посоветуйте мне, как яможно добиться этого, используя лучший метод.

Ответы [ 2 ]

3 голосов
/ 16 октября 2019

Вы можете взять первое значение (:name) и получить его продукт с каждым оставшимся элементом, используя Array#product:

array = [:name, :max, :john, :raj, :sam]
p [array[0]].product(array[1..-1])
# [[:name, :max], [:name, :john], [:name, :raj], [:name, :sam]]
2 голосов
/ 16 октября 2019

Массив # product лучше, но вы также можете использовать Array # zip :

ary = [:a, :b, :c, :d]

([ary.first]*(ary.size-1)).zip ary[1..]
#=> [[:a, :b], [:a, :c], [:a, :d]]

Или также:

ary.then { |a, *rest| ([a] * rest.size).zip rest }

Но да, продукт чище:

ary.then { |a, *rest| [a].product rest }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...