0

我有这样的二维数组:

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

我知道如何通过循环二维数组来获得这个。但是因为我正在学习红宝石,所以我想我可以用这样的东西来做到这一点

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

这给了我:

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

如何从输出映射中删除 0 元素?

4

2 回答 2

1

我会写:

Hash[ary.drop(1).map.with_index(1) { |xs, idx| [idx, xs.first] }]
#=> {1=>"db", 2=>"import", 3=>"webservice"}
于 2013-03-20T16:10:17.680 回答
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] } ]
于 2013-03-20T15:58:27.930 回答