使用索引将二维数组映射到一维数组

时间:2013-03-20 15:28:45

标签: ruby

我有这样的2d数组:

ary = [
  ["Source", "attribute1", "attribute2"],
  ["db", "usage", "value"],
  ["import", "usage", "value"],
  ["webservice", "usage", "value"]
]

我想在哈希中提取以下内容:

{1 => "db", 2 => "import", 3 => "webservice"} // keys are indexes or outer 2d array

我知道如何通过循环使用2d数组来实现此目的。但是因为我正在学习红宝石,我以为我可以用这样的东西做到这一点

ary.each_with_index.map {|element, index| {index => element[0]}}.reduce(:merge)

这给了我:

{0=> "Source", 1 => "db", 2 => "import", 3 => "webservice"}

如何摆脱输出地图中的0元素?

2 个答案:

答案 0 :(得分:1)

我写道:

Hash[ary.drop(1).map.with_index(1) { |xs, idx| [idx, xs.first] }]
#=> {1=>"db", 2=>"import", 3=>"webservice"}

答案 1 :(得分:0)

ary.drop(1)删除第一个元素,返回其余元素。

您可以直接构建哈希,而不使用each_with_object

进行合并缩减
ary.drop(1)
  .each_with_object({})
  .with_index(1) { |((source,_,_),memo),i| memo[i] = source }

或映射到元组并发送到Hash[]构造函数。

Hash[ ary.drop(1).map.with_index(1) { |(s,_,_),i| [i, s] } ]