Compare multiple values in a Ruby array -


  [{"नाम": "जॉन डो", "स्थान": {"name": "न्यूयॉर्क "" "" "" "" "", "आईडी": "आईडी": 12746342329}, "गृहनगर": {"नाम": "ब्रुकलिन, न्यू यॉर्क", "आईडी": 43453644}}, {"नाम": "जेन डो", "स्थान" {"नाम": "मियामी, फ्लोरिडा", "आईडी": 1274634232 9}, "गृहनगर": {"नाम": "क्वींस, न्यू यॉर्क", "आईडी": 12746329}}]  

JSON के इस टुकड़े को देखते हुए, मैं कैसे "पाल" के माध्यम से और सभी "गृहनगर" और "स्थान" कुंजियों को बाहर कर सकता हूं और देख सकता हूँ कि किसके पास न्यू यॉर्क का मूल्य है?

मेरी समस्या यह है कि मैं इन मदों के माध्यम से अर्रे कर सकता हूं। लेकिन मुझे नहीं पता है कि दोनों स्थान और amp; amp; मेरे मानदंड ("न्यूयॉर्क") के साथ गृहनगर

  लोग.सहेक्ट {| व्यक्ति | person.any? {| कश्मीर, वी | % W [स्थान गृह नगर]। शामिल करें? (कश्मीर) और amp; amp; / न्यू यॉर्क / = ~ वी ['नाम']}}  

यह मूल रूप से निम्नलिखित कहते हैं: सरणी में सभी प्रविष्टियों का चयन करें, जिसके लिए निम्न शर्त सही है शर्त यह है कि क्या किसी भी कुंजी-मान जोड़े के लिए यह सही है कि कुंजी या तो 'गृह नगर' या 'location' और नाम उस कुंजी से संबंधित मान की संपत्ति Regexp / न्यूयॉर्क / से मेल खाता है?

हालांकि, आपका ऑब्जेक्ट मॉडल रिफैक्टरिंग की गंभीर आवश्यकता में प्रतीत होता है। वास्तव में, मुख्य समस्या यह है कि आपका ऑब्जेक्ट मॉडल ऑब्जेक्ट मॉडल भी नहीं है, यह एक हैश और सरणी मॉडल है।

यहां एक उचित ऑब्जेक्ट मॉडल से मेरा क्या मतलब है:

  वर्ग व्यक्ति attr_reader: नाम,: स्थान,: गृहनगर डीईएफ़ प्रारंभ (नाम, स्थान = शून्य, गृह नगर = शून्य) @ नाम, @ स्थान, @ स्थान का नाम, स्थान, गृहनगर अंत डीईएफ़ शहरों @ स्थान, @ आवास अंत अंत वर्ग सिटी attr_reader: id,: नाम def initialize (आईडी, नाम) @id, @name = आईडी, नाम अंत डीईफ़ = ~ (अन्य) नाम = ~ अन्य अंत अंत NYC = City.new (12746342329, 'न्यूयॉर्क , न्यू यॉर्क ') ब्रूकलिन = सिटी.न्यू (43453644,' ब्रुकलिन, न्यू यॉर्क ') मियामी = सिटी.न्यू (12746342329,' मियामी, फ्लोरिडा ') क्वीन = सिटी। न्यू (1274632 9,' क्वींस, न्यू यॉर्क ') जॉन = 'जॉन डो', एनवाईसी, ब्रुकलिन) जेन = पर्सन.न्यू ('जेन डो', मियामी, क्वीन) लोग = [जॉन, जेन]  

यदि आपके पास है ऐसा उचित ऑब्जेक्ट मॉडल, आपका कोड बहुत साफ हो जाता है, क्योंकि बल्ट की नट को अलग करने के बजाय हैश और सरणियों के नेस्टेड भूलभुलैया की, आपके पास बहुत कम वस्तुएं हैं जिन्हें आप बस कुछ प्रश्न पूछ सकते हैं:

  लोग। चयन {| व्यक्ति | person.cities.any? {| शहर | आप लगभग इस तरह की अंग्रेजी पढ़ सकते हैं: सरणी से उन सभी लोगों का चयन करें, जिनके लिए उनके शहरों में से कोई भी Regexp  / New York / 

यदि हम ऑब्जेक्ट मॉडल को और बेहतर बनाते हैं, तो इससे बेहतर हो जाता है:

  वर्ग व्यक्ति डीआर def_in? (Pattern) cities.any? {| शहर | शहर = ~ पैटर्न} अंत अंत लोग। चयन {| व्यक्ति | यह व्यक्ति मूल रूप से "लोगों से, उन लोगों का चयन करें जो एक समय न्यूयॉर्क में रहते थे"। यह "लोगों की तुलना में बहुत बेहतर है, जिनके लिए मुख्य मूल्य युग्म का पहला तत्व स्ट्रिंग  'होमटाउन'  या स्ट्रिंग  'location'  है और दूसरा कुंजी वैल्यू जोड़ी का तत्व रेगेक्स  / न्यू यॉर्क /  से मेल खाता है। 


Comments

Popular posts from this blog

c# - sqlDecimal to decimal clr stored procedure Unable to cast object of type 'System.Data.SqlTypes.SqlDecimal' to type 'System.IConvertible' -

Calling GetGUIThreadInfo from Outlook VBA -

Obfuscating Python code? -