0

これは別の「Ruby で X を実行する最もエレガントな方法は何か」というタイプの質問です。次の行に沿って、戻り本文の各行にキーと値のペアがある Web サービスからの応答を考えてみましょう。

key1:val1
key2:val2
key3:val3

このデータで Ruby ハッシュを作成したい{"key1" => "val1", ...}. アルゴリズム的に、私は git 'er done で

hash = {}
body.lines.each do |line|
  key, val = line.split(':')
  hash[key] = val
end

しかし、さらにエレガントなワンライナーまたはツーライナーがあると思います。

4

3 に答える 3

2

これが私の提案です:

lines = [
  'key1:val1',
  'key2:val2',
  'key3:val3'
]

hash = Hash[lines.map {|it| it.split(':', 2)}]

説明

Hash[object]オブジェクトから新しいハッシュを作成します。オブジェクトは次のいずれかです。

  • 要素のリスト
  • ペア一覧
  • ハッシュ化できるオブジェクト
于 2012-07-19T22:14:00.347 に答える
1

あなたがオブジェクトのペアを持っているなら、それHash[]はあなたの友達です:

Hash[lines.map {|key_val| key_val.split(":")}]
=> {"key1"=>"val1", "key2"=>"val2", "key3"=>"val3"} 

クソ、遅すぎる…

于 2012-07-19T22:17:41.533 に答える
0

投稿にはキャレットリターンがあるため、実際のトピックの解決策は

hash = Hash[lines.split(/\s/).map {|line| line.split(':', 2)}]
于 2012-07-19T22:28:59.597 に答える