2010-12-07 11 views
8

मैं वर्तमान में एक रूबी हैश के साथ काम कर रहा हूं जो निम्न जैसा दिखता है:रूबी: मूल्यों से हैश में आइटम खोजें

{"employee"=>[{"name"=>"john", "level"=>"1", "position"=>"S1"}, 
       {"name"=>"bill", "level"=>"2", "position"=>"S2"}]} 

ये कर्मचारियों के दो उदाहरण हैं और मुझे कर्मचारियों को मूल्यों से बाहर खींचने में सक्षम होना चाहिए। उदाहरण के लिए, मैं उन सभी कर्मचारियों को प्राप्त करना चाहता हूं जो स्तर == 2 हैं, या सभी कर्मचारी जो स्थिति == एस 1 हैं।

मैं रूबी में ऐसा कैसे करूं?

+4

मैं कुंजी के रूप में प्रतीकों का उपयोग की सलाह देते हैं के लिए मूल्य के आसपास उद्धरण डाल करने के लिए सुनिश्चित करें। – jwueller

+1

सुझाव के लिए धन्यवाद, मैंने कोड को डंप से खींच लिया है, वे आंतरिक रूप से चाबियाँ हैं, क्या यह बदलता है कि आप इसे कैसे हल करेंगे, या आप बस वाक्यविन्यास सुझाव बना रहे हैं। –

+0

@ जेरेमी यह सिर्फ एक सुझाव है। –

उत्तर

23

Hash#select या Array#select का उपयोग करें।

level_2_employees = infoHash["employee"].select {|k| k["level"] == "2"} 

यह आपके मानदंडों के अनुसार कर्मचारी जानकारी हैश की एक सरणी वापस कर देगा। स्तर

5
ehash = {"employee"=>[{"name"=>"john", "level"=>"1", "position"=>"S1"}, 
         {"name"=>"bill", "level"=>"2", "position"=>"S2"}]} 
ehash['employee'].find_all { |e| e['level'] == 2} 
ehash['employee'].find_all { |e| e['position'] == 'S2'} 
संबंधित मुद्दे