我对红宝石很陌生,所以请问这是一个基本问题。
我有一个看起来像这样的列表:
[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'] 请为我提供建议,告诉我如何使用最佳方法来实现这一目标。
答案 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 }