このように構造化されたデータを含むファイルがある場合:
unknown|0
Action|1
Adventure|2
Animation|3
...
|
「 」の前の文字列とその後の数字を分離して、次のようなハッシュを作成するにはどうすればよいですか。
{"unknown"=> 0, "Action" => 1...}
このように構造化されたデータを含むファイルがある場合:
unknown|0
Action|1
Adventure|2
Animation|3
...
|
「 」の前の文字列とその後の数字を分離して、次のようなハッシュを作成するにはどうすればよいですか。
{"unknown"=> 0, "Action" => 1...}
String#split
あなたの友だちです:
s = "unknown|0"
key, value = s.split("|")
hash = { key => value }
または、入力を減らして難読化する場合は、次のようにします。
Hash[*s.split("|")]
編集
明らかに、これはファイルからの行の読み取りを処理しません。
すっごく醜いですが、それは動作します!
h=Hash[*s.chomp.split("\n").map{|i| i.split("|")}.flatten]
従うのが最も簡単なのは次のようなものだと思います。
hash = {}
data.each_line do |line|
split = line.split('|')
hash[split[0]] = split[1]
end
ファイル/tmp/ fooが与えられると、次のようにファイル全体を1行のハッシュに解析できます。
Hash[*IO.readlines('/tmp/foo').map(&:chomp).collect { |l| l.split('|') }.flatten]
あまり読みやすくはありませんが、機能します。