2

このように構造化されたデータを含むファイルがある場合:

unknown|0   
Action|1  
Adventure|2  
Animation|3  
...

|「 」の前の文字列とその後の数字を分離して、次のようなハッシュを作成するにはどうすればよいですか。

{"unknown"=> 0, "Action" => 1...}
4

4 に答える 4

3

String#splitあなたの友だちです:

s = "unknown|0"
key, value = s.split("|")
hash = { key => value }

または、入力を減らして難読化する場合は、次のようにします。

Hash[*s.split("|")]

編集

明らかに、これはファイルからの行の読み取りを処理しません。

于 2012-06-14T03:32:07.993 に答える
1

すっごく醜いですが、それは動作します!

h=Hash[*s.chomp.split("\n").map{|i| i.split("|")}.flatten]
于 2012-06-14T03:30:46.307 に答える
1

従うのが最も簡単なのは次のようなものだと思います。

hash = {}  
data.each_line do |line|
  split = line.split('|')
  hash[split[0]] = split[1]
end
于 2012-06-14T03:35:33.000 に答える
1

ファイル/tmp/ fooが与えられると、次のようにファイル全体を1行のハッシュに解析できます。

Hash[*IO.readlines('/tmp/foo').map(&:chomp).collect { |l| l.split('|') }.flatten]

あまり読みやすくはありませんが、機能します。

于 2012-06-14T03:43:54.310 に答える