आप ऑब्जेक्ट्स के ऐरे को फ़िल्टर करने के लिए रूबी में select मेथड का उपयोग कर सकते हैं।
उदाहरण के लिए, आप किसी सूची में सभी सम संख्याएँ ढूंढ सकते हैं।
select के बिना यह कुछ इस तरह दिखता है:
even_numbers = []
[1,2,3,4,5,6].each do |n|
if n.even?
even_numbers << n
end
end
even_numbers
इतने सरल काम के लिए यह काफी कोड है!
आइए सीखते हैं कि select का उपयोग कैसे करें।
Select मेथड उदाहरण
select का उपयोग करने के लिए एक ब्लॉक की आवश्यकता होती है।
ब्लॉक के अंदर, आपको कुछ ऐसा वापस करना होगा जो true या false में मूल्यांकन हो, और select आपके ऐरे को फ़िल्टर करने के लिए इसका उपयोग करेगा।
आप इस लेख को पढ़कर रूबी में बूलियन मानों के बारे में जान सकते हैं।
यहाँ एक उदाहरण है:
[1,2,3,4,5,6].select { |n| n.even? }
यह परिचय में पहले उदाहरण के समान काम करेगा, लेकिन बहुत कम कोड के साथ।
वास्तव में, हम इसे और भी कम कर सकते हैं।
इस तरह:
[1,2,3,4,5,6].select(&:even?)
इस तरह का शॉर्टकट केवल तब काम करता है जब आपको ऐरे के प्रत्येक तत्व पर सीधे एक मेथड कॉल करना होता है।
वैसे, आप select का उपयोग हैश के साथ भी कर सकते हैं।
उदाहरण:
stock = { apples: 10, oranges: 5, bananas: 1 }
stock.select { |k, v| v > 1 } # {:apples=>10, :oranges=>5}
जहाँ k कुंजी को दर्शाता है और v मान को दर्शाता है।
मेरा मतलब है:
"मुझे 1 से अधिक स्टॉक वाले सभी फल ढूंढ दो।"
अन्य मेथड्स के साथ Select को संयोजित करना
आप select मेथड को किसी अन्य Enumerable मेथड के साथ संयोजित कर सकते हैं।
सबसे विशेष रूप से with_index।
उदाहरण:
fruits = %w(apple orange banana)
fruits.select.with_index { |word, idx| idx.even? } # ["apple", "banana"]
यह आपको ऑब्जेक्ट के बजाय इंडेक्स का उपयोग करके फ़िल्टर करने की अनुमति देता है (इस मामले में एक स्ट्रिंग)।
इन-प्लेस ऐरे फ़िल्टरिंग
ऐरे पर select का उपयोग करने से हमेशा एक नया ऐरे बनता है।
यदि आप इसके बजाय मूल ऐरे को बदलना चाहते हैं, तो आप select! मेथड का उपयोग कर सकते हैं।
यहाँ बताया गया है:
fruits = %w(apple orange banana)
fruits.select! { |fruit| fruit.start_with? "a" } # ["apple"]
विस्मयादिबोधक चिह्न (जैसे select!) से समाप्त होने वाली मेथड्स नया ऑब्जेक्ट लौटाने के बजाय ऑब्जेक्ट को बदल देती हैं, लेकिन यह नियम भाषा द्वारा लागू नहीं किया जाता है।
यह हमारे बीच केवल एक कन्वेंशन है।
Find बनाम Select
select तब बढ़िया होता है जब आप किसी सूची को फ़िल्टर करना चाहते हैं और परिणामों के साथ एक ऐरे प्राप्त करना चाहते हैं।
लेकिन क्या होगा यदि आप केवल एक ऑब्जेक्ट ढूंढना चाहते हैं?
आप find मेथड का उपयोग कर सकते हैं।
इस तरह:
letters = %w(a aa aaa aaaa)
letters.find { |l| l.size == 3 } # "aaa"
letters.find { |l| l.size == 10 } # nil
find आपको पहला मैच देता है, या nil यदि यह नहीं मिलता है।
Find All मेथड को समझना
यदि आप find_all मेथड के बारे में सोच रहे हैं, और यह find और select से कैसे संबंधित है...
यह बहुत सरल है!
find_allमेथडselectका एक उपनाम (alias) है।findमेथड आपको एक विशिष्ट ऑब्जेक्ट खोजने में मदद करता है, कई ऑब्जेक्ट्स के बजाय।
रूबी 2.6 select के लिए एक और उपनाम जोड़ता है:
filter
Select का विपरीत क्या है?
आप उन तत्वों को हटा सकते हैं जो आप नहीं चाहते, बजाय उनके चुनने के जिन्हें आप चाहते हैं।
select के साथ यह आसान है:
[1,2,3,4,5,6].select { |n| n != 4 }
लेकिन एक मेथड है जो चीजों को अधिक स्पष्ट बनाता है।
वह मेथड है reject।
उदाहरण:
[1,2,3,4,5,6].reject { |n| n == 4 }
आपको प्रदर्शन या अन्यथा के संदर्भ में कोई तकनीकी लाभ नहीं मिलता, लेकिन यह आपके कोड को बेहतर बनाएगा।
Rails Select मेथड
मैं नहीं चाहता कि आप भ्रमित हों जब आप Rails मॉडल्स के साथ काम करें और सीखें कि आप वहां भी select का उपयोग कर सकते हैं।
आपको पता होना चाहिए कि...
यह select मेथड अलग है!
उदाहरण:
Fruit.select(:id, :name, :color)
जब आप ActiveRecord मॉडल के साथ select का उपयोग करते हैं तो आप डेटाबेस से विशिष्ट कॉलम मांग रहे होते हैं।
जहाँ तक मैं समझता हूँ यह ज्यादातर प्रदर्शन कारणों से किया जाता है।
इस पर एक अंतिम नोट:
यदि आप Rails ऐप के अंदर एक नियमित ऐरे के साथ काम कर रहे हैं तो आप वही select मेथड उपयोग कर रहे हैं जिसके बारे में हम इस पूरे लेख में बात कर रहे हैं।
सारांश
आपने select के बारे में सीखा, जो ऐरे, रेंज और हैश जैसे ऑब्जेक्ट्स के संग्रह के साथ काम करने के लिए रूबी की सबसे उपयोगी मेथड्स में से एक है।

अब आपकी बारी है अपना एडिटर खोलें और इसका उपयोग करें।
पढ़ने के लिए धन्यवाद!