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

我认为最容易遵循的是:

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

太丑了,但它有效!

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

给定文件/tmp/foo,您可以将整个文件解析为一行中的哈希,如下所示:

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

它的可读性不是很高,但它确实有效。

于 2012-06-14T03:43:54.310 回答