2012-07-24 72 views
1

我目前沒有具體的目的,我打算使用的例子肯定有更好的解決方案(因爲這對於簡單的事情來說是不必要的),但我仍然希望看到這可能是怎樣的完成。我想要用動態符號< - >內容填充散列。可以說我有一個包含文件:如何從文件內容創建動態散列?

this = that 
that = this 
frog = taco 
pota = to 

我想創建哈希:

hash = { :this => 'that', :that => 'this', :frog => 'taco', :pota => 'to' } 

我特別把它作爲符號如果可能的話,我相信我」已經看到它完成了變量。由於hash {variable =>'this'}會將變量的內容設置爲關鍵字。

+0

是您的文件結構給出?如果沒有,你可以看看[yaml](http://yaml.org/)或json。 – knut 2012-07-24 19:58:38

+0

我的文件結構是由我設計的 – Sturm 2012-07-24 19:59:32

回答

4
hash = Hash[open("file.txt").lines.map do |line| 
    key, value = line.split("=").map(&:strip) 
    [key.to_sym, value] 
end] 
+0

我承認我必須像讀取10次才能得到它。 – MurifoX 2012-07-24 19:58:58

+0

@Murifox:如果'Hash [']是'Enumerable'的方法(參見Facets的Enumerable#mash'),它會更具可讀性。否則,這是非常標準的東西。 – tokland 2012-07-24 19:59:48

1

如果你可以定義自己的文件格式,你可能會略有不同及用途:

this: that 
that: this 
frog: taco 
pota: to 

這是YAML -syntax。

您可以加載它很容易:

require 'yaml' 

filename = 'yourdatafile.txt' 

p YAML.load(File.read(filename)) 

這將使使用字符串的哈希值。但在數據文件中稍加修改給你你想要的符號:

:this: that 
:that: this 
:frog: taco 
:pota: to