0

私はこのような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要素を取り除くにはどうすればよいですか?

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 に答える