我有这样的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元素?
答案 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] } ]