2013-01-03 114 views
0

我有一個YAML文件,我正在使用它來種子一些Ruby on Rails模型。我使用YAML.load(filename)加載。在創建RoR模型之前,某些鍵需要一些後處理,例如,需要從文件名打開文件。在紅寶石中從哈希中提取多個值,修改原始哈希並返回提取的值

我想從散列提取兩個值到變量中,留下沒有這些值的散列值。

在Ruby中這樣做的最習慣的方式是什麼?

編輯:

我曾嘗試做:

value1 = hash.delete(:key1) 
value2 = hash.delete(:key2) 

這給了我value1value2罰款,但葉散不變。

+0

@SunnyJuneja更新了問題 –

+0

如何創建'hash'?它的類是什麼(使用'puts hash.class')? – Baldrick

+0

散列由YAML.load(...)['some key']創建。當我在10分鐘內回到我的代碼時,我將打印該課程。 –

回答

1

如何使用枚舉器並從散列中提取每個值,並將散列保留在其原始實體中。

hash = { :key1 => value1, :key2 => value2 } 

# Iterates over values 
hash.each_value {|val| print val} 

或另一替代:

print hash.shift[1] while not hash.empty? 

通常,delete方法刪除散列指定鍵並返回刪除值。

hash.delete (:key1) # => returns the deleted value. Now the hash should contain {:key2=>value2} 
0

YAML.load生成的散列使用了字符串鍵而不是符號鍵。我試圖用符號鍵刪除所以沒有被刪除。