2

文字列をハッシュに変換するにはどうすればよいですか?

今私は使用します:

eval "{'1627207:28320'=>'text'}"
=> {'1627207:28320'=>'text'}

しかし、「eval」は私の場合には適していません-paramsから渡された文字列であり、そのような場合は安全ではありません

編集:

渡された文字列は次の場合もあります。

"{'1627207'=>'text', '11:167:28320'=>'text 1 / text 2 / unicode=>привет!'}"

次に、結果ハッシュが必要です。

{'1627207:28320'=>'text',
'11:167:28320'=>'text 1 / text 2 / unicode=>привет!'}
4

4 に答える 4

4
str = "{'1627207:28320'=>'text'}"
p Hash[*str.delete("{}'").split('=>')] #{"1627207:28320"=>"text"}

別の入力用に編集:

str = "{'1627207:28320'=>'text', 'key2'=>'text2'}" 
p Hash[*str.delete("{}'").split(/=>|, /)] #{"1627207:28320"=>"text", "key2"=>"text2"}
于 2012-05-02T09:25:33.750 に答える
2
class String
  def to_h
    h={}
    self.scan(/'(\w+.\w+)'=>'(\w+)'/).each { |k,v| h[k]=v }
    h
  end
end

p "{'1627207:28320'=>'text','test'=>'text2'}".to_h
=>{"1627207:28320"=>"text", "test"=>"text2"}

編集:短いバージョン

class String
  def to_h
    Hash[self.scan(/'([^']+)'=>'([^']+)'/)]
  end
end
于 2012-05-02T13:45:11.083 に答える
0

あなたは単にこれを試すことができます:

text_hash['1627207:28320'] = 'text'
text_hash
于 2012-05-02T15:02:03.103 に答える
0

非常に簡単です:

$ irb
irb(main):001:0> k='1627207:28320'
=> "1627207:28320"
irb(main):002:0> v='text'
=> "text"
irb(main):003:0> h={k => v}
=> {"1627207:28320"=>"text"}
irb(main):004:0> h
=> {"1627207:28320"=>"text"}
irb(main):005:0>
于 2012-05-02T08:53:52.120 に答える