1

我试图Enumerable#zip在数组数组上使用,以便将第一个嵌套数组的元素与每个后续嵌套数组的相应元素分组。这是我的数组:

roster = [["Number", "Name", "Position", "Points per Game"],
          ["12","Joe Schmo","Center",[14, 32, 7, 0, 23] ],
          ["9", "Ms. Buckets ", "Point Guard", [19, 0, 11, 22, 0] ],
          ["31", "Harvey Kay", "Shooting Guard", [0, 30, 16, 0, 25] ], 
          ["7", "Sally Talls", "Power Forward", [18, 29, 26, 31, 19] ], 
          ["22", "MK DiBoux", "Small Forward", [11, 0, 23, 17, 0] ]]

我想将“数字”与“12”、“9”、“31”、“7”和“22”分组,然后使用 zip 对“名称”、“位置”等进行相同的操作。以下给了我想要的输出:

roster[0].zip(roster[1], roster[2], roster[3], roster[4], roster[5])

我怎样才能重新格式化它,以便如果我将球员添加到我的名单中,他们将自动包含在zip我不必手动输入roster[6],roster[7]等的情况下。我尝试过以多种方式使用范围,但似乎没有任何效果然而。

4

4 回答 4

16

首先使用 splat 提取列表的头部和尾部(分别是标题和行),然后将zip它们放在一起:

header, *rows = roster
header.zip(*rows)

transpose这与在原版上使用相同roster

header, *rows = roster
zipped = header.zip(*rows)

roster.transpose == zipped  #=> true
于 2013-09-01T23:21:21.677 回答
2
:zip.to_proc[*roster]

比以下更灵活一点transpose

:zip.to_proc[*[(0..2), [:a, :b, :c]]] #=> [[0, :a], [1, :b], [2, :c]]

于 2013-09-02T01:30:11.723 回答
1
p roster.transpose()

.....................

于 2013-09-01T23:29:58.917 回答
0
roster[0].zip(*(roster[1..-1]))

名册阵列中有多少人无关紧要。

于 2013-09-01T23:26:48.063 回答