2013-03-01 2 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

+0

@Arindam - 키는 사용자가 제공하는 값의 집합 일 수 있습니다. 이 키는 실제로 테이블의 열에 해당합니다. –

답변

2

또한이

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

대답, 이것이 가능할 수있다. 그것을 지금 시도하십시오. –

+0

<% [: id, : order_id, : status] .each do | key |; value = order_item [key] %> 작동 중입니다. 건배. –

2

:

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

루비 1.9.3에서는 해시 (http://www.ruby-doc.org/core-1.9.3/Hash.html#method- 선택)를 반환하지만, 루비 1.8.7에서는 '| key, value |'를 적용하기 전에 해시로 다시 변환해야하는 배열 (http://www.ruby-doc.org/core-1.8.7/Hash.html#method- 선택) 블록 – Arindam

+0

@Arindam 그것은 실제로'1.8.7'에서 작동합니다. 그것은'Array'로 변환되지만, select는 배열의 배열 (쌍의 배열)을 생성 했으므로 쌍으로 전달됩니다. – oldergod

+0

좋은 지적입니다. 개인적으로 그런 종류의 코드가 떠 다니는 것을 좋아하지 않을 것입니다. 특정 로컬 구현으로 인해 해시로 전달되는 배열? 좋은 습관은 아닙니다. 그러므로 그것을 지적했다. 그래서 무고한 사람들이 어떤 시점에서 유죄를 인정받지 못할 수도있다 :-) – Arindam

2

시도 할 수 :

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

그리고 당신이 호출 할 수 있습니다

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

또는

당신은 사용할 수 있습니다

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