从列表中创建一个数组,其中数组的第一个元素是列表中的第一个元素

时间:2019-10-16 19:00:23

标签: arrays ruby data-structures

我对红宝石很陌生,所以请问这是一个基本问题。

我有一个看起来像这样的列表:

    [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 个答案:

答案 0 :(得分:3)

您可以使用Array#product来获取第一个值(:name)并使用每个剩余元素获得其乘积:

array = [:name, :max, :john, :raj, :sam]
p [array[0]].product(array[1..-1])
# [[:name, :max], [:name, :john], [:name, :raj], [:name, :sam]]

答案 1 :(得分:2)

Array#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 }