2013-07-16 26 views
5

我在我的yaml文件中有一個哈希映射如下。如何在簡單的ruby腳本中迭代它?我想在迭代期間將密鑰存儲在我的ruby程序中的另一個變量中的變量和值中。如何在Ruby中迭代yaml哈希結構?

source_and_target_cols_map: 
- 
    com_id: community_id 
    report_dt: note_date 
    sitesection: site_section 
    visitor_cnt: visitors 
    visit_cnt: visits 
    view_cnt: views 
    new_visitor_cnt: new_visitors 

我收到從YAML文件中的數據的方法是如下:

#!/usr/bin/env ruby 

require 'yaml' 

    config_options = YAML.load_file(file_name) 
    @source_and_target_cols_map = config_options['source_and_target_cols_map'] 
puts @source_and_target_cols_map 
+0

那個鍵''source_table''不出現在你的'YAML'中 –

+0

是的,我知道。它只是一個例子。我如何使它呈現,以便我可以遍歷鍵值對的值? – Doublespeed

回答

1

根據你yaml文件時,它則應該從線config_options = YAML.load_file(file_name)

config_options = { 'source_and_target_cols_map' => 
[ { 'com_id' => 'community_id', 
    'report_dt' => 'note_date', 
    'sitesection' => 'site_section', 
    'visitor_cnt' => 'visitors', 
    'visit_cnt' => 'visits', 
    'view_cnt' => 'views', 
    'new_visitor_cnt' => 'new_visitors' } 
    ]} 
得到以下 Hash

然後遍歷你可以採取以下方法:

config_options['source_and_target_cols_map'][0].each {|k,v| key = k,value = v} 
+0

謝謝,讓我試試看看它是否有效 – Doublespeed

+0

好吧,yaml不工作。我認爲我的yaml有問題。 '不能在第8行第1列解析YAML(Psych :: SyntaxError)' – Doublespeed

+0

@ user2081579是您發佈的* YAML *無效。但你應該得到*哈希*,因爲我已經給你。然後你可以用'each'方法訪問inner * Hash *。 –

3

的YAML.load_file方法應該返回一個Ruby散列,這樣你就可以在你通常會以同樣的方式遍歷它,使用的每一種方法:

require 'yaml' 

config_options = YAML.load_file(file_name) 
config_options.each do |key, value| 
    # do whatever you want with key and value here 
end