2013-03-01 61 views
1

我有一個代碼,可以在其中打印所有密鑰和散列值。我想讓它可配置,這樣就不用打印所有的按鍵,而只需打印所需的按鍵。假設我有密鑰k1,k2,k3 ... k20。我想打印k1,k3,k8 .... k15,k18。什麼是最好的方式去做這件事?僅打印選擇鍵而不是所有鍵值對?

這是相關的代碼片段 - :

<%@order_items.each do |order_item|%> 
     <h5>Order Item</h5> 
     <%order_item.each do |key,value|%> 

      <table cellspacing=2> 

      <tr><td><%=key.capitalize%>: </td> <td><%= value %></td></tr> 

      </table> 
     <%end%> 
     <%end%> 
+0

要保持鍵是一些序列,也可以是任意組的值用戶提供? – Arindam 2013-03-01 10:01:27

+0

@Arindam - Keys可以是用戶提供的任何一組值。這些鍵實際上對應於表中的列。 – 2013-03-01 10:11:05

回答

2

你可以這樣做也是這個

<% [1,3,8,15,18].each do |key|; value = order_item[key] %> 
+0

回覆,這可能有效。現在給它一個嘗試。 – 2013-03-01 10:09:52

+0

<%[:id,:order_id,:status] .each do | key |;值= order_item [鍵]%>正在工作。乾杯。 – 2013-03-01 10:30:23

2

有了類似的東西:

<% order_item.select{|k,_| [1,3,8,15,18].include?(k)}.each do |key,value| %> 
+0

請注意,在Ruby 1.9.3中它會返回一個散列(http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-select),但在紅寶石1.8.7中它返回一個數組(http://www.ruby-doc.org/core-1.8.7/Hash.html#method-i-select),在應用'| key,value |'前,需要將其轉換回散列值。塊 – Arindam 2013-03-01 09:59:10

+0

@Arindam它實際上在'1.8.7'中工作。它被轉換爲一個'Array',但是它們將作爲pair來傳遞,因爲select會生成一個數組 - 一組數組 - 一組數組 - 。 – oldergod 2013-03-01 10:02:35

+0

是的好點。我個人不喜歡那種漂浮的代碼。 '由於特定的本地實現而散列爲散列'的數組?不是一個好習慣。因此指出了這一點,以便無辜的人在某個時間點不會被控告:-) – Arindam 2013-03-01 10:05:21

2

嘗試:

class Hash 
    def select_keys(*args) 
    select {|k,v| args.include?(k) } 
    end 
end 

然後你就可以撥打:

h.select_keys(1,3,8,15,18) 

OR

你可以使用:

hash.slice(1,3,8,15,18) 
# => { '1' => 'value1', '3' => 'value2', '8' => 'value3', '15' => 'value4', '18' => 'value5' }