1

文字列とハッシュを交互に使用する要素を持つRuby配列があります。例えば-

["1234", Hash#1, "5678", Hash#2]

これからネストされたハッシュ構造を作成したいと思います。それで、

hash["1234"]["key in hash#1"] = value
hash["5678"]["key in hash#2"] = value

誰かがこれを行うための良い方法を持っていますか/今はありますか?ありがとうございました。

4

4 に答える 4

7

単に使用する

hsh = Hash[*arr] #suppose arr is the array you have

一度に2つスライスし、ハッシュに変換します。

于 2012-05-22T15:58:44.680 に答える
3

これを直接行う方法は配列にはないと思います。次のコードは機能し、非常に読みやすいです。

hsh = {}

ary.each_slice(2) do |a, b|
  hsh[a] = b
end

# Now `hsh` is as you want it to be
于 2012-05-22T15:44:04.577 に答える
1

「hash#1のキー」はまったく明確ではないため、何が必要かを推測します。また、何を定義するか、何をすべきhashかを定義していません。value

value = 42

h1 = {a:1}
h2 = {b:2}
a = ["1234",h1,"5678",h2]
a.each_slice(2).each{ |str,h| h[str] = value }
p h1, #=> {:a=>1, "1234"=>42}
  h2  #=> {:b=>2, "5678"=>42}

あるいは、おそらくあなたはこれを意味します:

h1 = {a:1}
h2 = {b:2}
a = ["1234",h1,"5678",h2]

hash = Hash[ a.each_slice(2).to_a ]
p hash             #=> {"1234"=>{:a=>1}, "5678"=>{:b=>2}}
p hash["1234"][:a] #=> 1
于 2012-05-22T15:49:04.597 に答える
1

推測してみましょう。楽しみのためだけにファセットを使用します。

require 'facets'
xs = ["1234", {:a => 1, :b => 2}, "5678", {:c => 3}]
xs.each_slice(2).mash.to_h
#=> {"1234"=>{:a=>1, :b=>2}, "5678"=>{:c=>3}}
于 2012-05-22T15:52:59.010 に答える