जवाबों:
ऐसा करने के कई तरीके हैं, एक है reject
noEmptyCities = cities.reject { |c| c.empty? }
आप उपयोग भी कर सकते हैं reject!
, जो cities
जगह में संशोधित करेगा । यह या तो cities
इसके वापसी मूल्य के रूप में वापस आ जाएगा यदि यह कुछ अस्वीकार कर दिया, या nil
यदि कोई अस्वीकृति नहीं हुई है। यदि आप सावधान नहीं हैं तो एक गोचा हो सकता है (टिप्पणियों में इसे इंगित करने के लिए निंजा08 के लिए धन्यवाद)।
cities.reject!(&:blank?)
? empty?
सरणियों के लिए है
blank?
केवल के माध्यम से उपलब्ध है ActiveSupport
। स्टैंडर्ड रूबी का उपयोग करता है String#empty?
: ruby-doc.org/core-1.9.3/String.html#method-i-empty-3F
reject
से बेहतर है reject!
क्योंकि [].reject!(&:empty?)
रिटर्न nil
, [].reject(&:empty?)
रिटर्न[]
यहाँ मेरे लिए क्या काम करता है:
[1, "", 2, "hello", nil].reject(&:blank?)
उत्पादन:
[1, 2, "hello"]
:blank?
वह रेल-विशिष्ट है।
NoMethodError: undefined method empty? for nil:NilClass
, :blank?
से बेहतर है:empty?
:blank
से बेहतर काम करता है :empty
। क्योंकि के :empty
लिए काम नहीं करता हैnil
मेरी परियोजना में मैं उपयोग करता हूं delete
:
cities.delete("")
जब मैं इस तरह से एक सरणी को साफ करना चाहता हूं तो मैं इसका उपयोग करता हूं:
["Kathmandu", "Pokhara", "", "Dharan", "Butwal"] - ["", nil]
यह सभी रिक्त या शून्य तत्वों को हटा देगा।
cities.delete_if(&:blank?)
यह nil
मान और रिक्त स्ट्रिंग ( ""
) मान दोनों को निकाल देगा ।
उदाहरण के लिए:
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal", nil]
cities.delete_if(&:blank?)
# => ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
इसे इस्तेमाल करे:
puts ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"] - [""]
उपयोग करें reject
:
>> cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"].reject{ |e| e.empty? }
=> ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
reject(&:empty?)
।
nil.empty?
वरदान तोड़ो!
reject(&:empty?)
के साथ compact
जैसे[nil, ''].compact.reject(&:empty?)
cities.reject! { |c| c.blank? }
आपके द्वारा उपयोग किए blank?
जाने का empty?
कारण यह है कि रिक्त शून्य, रिक्त तार और सफेद स्थान को पहचानता है। उदाहरण के लिए:
cities = ["Kathmandu", "Pokhara", " ", nil, "", "Dharan", "Butwal"].reject { |c| c.blank? }
अभी भी लौटेगा:
["Kathmandu", "Pokhara", "Dharan", "Butwal"]
और बुला empty?
पर " "
इच्छा वापसी false
है, जो आप शायद होना चाहता हूँ true
।
नोट: blank?
केवल रेल के माध्यम से पहुँचा जा सकता है, रूबी केवल समर्थन करता है empty?
।
यदि आप रेल की दुनिया में हैं, तो पहले से ही बहुत सारे उत्तर हैं, लेकिन यहाँ एक और तरीका है:
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"].select &:present?
present?
से आता है ActiveSupport
। इसमें कोई रेल टैग नहीं है और एक विधि के लिए अतिरिक्त रत्न की आवश्यकता अत्यधिक लगती है।
इसे प्राप्त करने के लिए यहां एक और तरीका है
हम के presence
साथ उपयोग कर सकते हैंselect
cities = ["Kathmandu", "Pokhara", "", "Dharan", nil, "Butwal"]
cities.select(&:presence)
["Kathmandu", "Pokhara", "Dharan", "Butwal"]
" "
मेरे सरणी में कुछ तत्व थे जिन्हें अस्वीकार पद्धति से नहीं हटाया गया था। आपका तरीका निकाला nil
""
या " "
आइटम।
सबसे छोटा रास्ता cities.select(&:present?)
एक अन्य विधि:
> ["a","b","c","","","f","g"].keep_if{|some| some.present?}
=> ["a","b","c","f","g"]
के साथ एक सख्त के साथ अद्यतन करें join
&split
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"]
cities.join(' ').split
परिणाम होगा:
["Kathmandu", "Pokhara", "Dharan", "Butwal"]
ध्यान दें: यह रिक्त स्थान वाले शहर के साथ काम नहीं करता है
cities.reject!(&:empty?)