2013-05-03 78 views
-1

如何用變量調用哈希值?用變量調用哈希值 - Ruby

我有這樣的哈希:data = {"5/3/2013 13:31:13"=>{:open=>65, :closed=>835}}

datasequences.each do |seq_title| 
sequence = Hash.new(0) 
sequence[:title] = seq_title 
sequence_data = Array.new(0) 
data.each do |key, value| 
    puts value[#{seq_title.to_sym}] 
    # More code... 
end 
end 

的每哈希(data)的seq_title值將是open然後closed

例如,如果我改變代碼讀取

datasequences.each do |seq_title| 
sequence = Hash.new(0) 
sequence[:title] = seq_title 
sequence_data = Array.new(0) 
data.each do |key, value| 
    puts value[:open] 
    # More code... 
end 
end 

在上面的代碼紅寶石輸出65,但我想值[VAR](未硬編碼),所以它可以輸出65,並通過下一個迭代835 。

+0

'[VARIABLE](:open,then:closed)'是什麼意思呢? – 2013-05-03 17:47:46

+0

我想調用哈希的值,就像這個值[#{seq_title.to_sym}],所以value [var]不是硬編碼的。在這個例子中,它可能是value [:open]或value [:closed]。 – 2013-05-03 17:48:17

+0

在這種情況下{{2013年5月1日10:42:40「:{」open「:10,」closed「:345},{」2013年5月2日10:42:40「:{」open 「:-1,」closed「:700},{」2013年5月3日10:42:40「:{」open「: - 29,」closed「:604}}'您期望什麼價值?爲什麼你不認爲'values_at'不會工作? – 2013-05-03 18:05:25

回答

1

你只需要指定一個變量的關鍵是:

% irb 
irb> data = { "5/3/2013 13:31:13"=>{:open=>65, :closed=>835}, "5/4/2013 14:41:14"=>{:open=>56, :closed=>538} } 
# => {"5/3/2013 13:31:13"=>{:open=>65, :closed=>835}, "5/4/2013 14:41:14"=>{:open=>56, :closed=>538}} 
irb> datasequences = [ :open, :closed ] 
# => [:open, :closed] 
irb> datasequences.each do |seq_title| 
irb| puts "seq_title is #{seq_title.inspect}" 
irb| data.each do |key, value| 
irb|  puts "\t#{value[seq_title]} at #{key}" 
irb| end 
irb| end 
seq_title is :open 
    65 at 5/3/2013 13:31:13 
    56 at 5/4/2013 14:41:14 
seq_title is :closed 
    835 at 5/3/2013 13:31:13 
    538 at 5/4/2013 14:41:14 
# => [:open, :closed] 
+0

@에이바你提供的數據較少,希望其他人猜測和回答,當他們回答你時,不斷添加你的所有需求。 – 2013-05-03 18:10:22

+0

我不確定@Priti是什麼意思。 – 2013-05-03 18:14:02

+1

請刪除irb噪音。 – sawa 2013-05-03 18:14:39

0

您需要使用Hash#values_at,如下圖所示:

data = {"5/1/2013 10:42:40" => {"open" => 10,"closed" => 345},"5/2/2013 10:42:40" => {"open" => -1,"closed" => 700}} 
datasequences = [ :open, :closed ] 

data.each do |k,v| 
    p v.values_at(*datasequences.map(&:to_s)) 
end 

輸出:

[10, 345] 
[-1, 700] 
+0

** Down-voter **問題在哪裏? – 2013-05-03 17:58:51

1

由於值本身是一個哈希,打印鍵和值是這樣的:

data.each do |key, value| 
    value.each do |k,v| 
    puts "#{k}: #{v}" 
    end 
    # More code... 
end