উত্তর:
এটি করার অনেকগুলি উপায় রয়েছে, একটি reject
noEmptyCities = cities.reject { |c| c.empty? }
আপনি ব্যবহার করতে পারেন reject!, যা citiesজায়গায় পরিবর্তন হবে । এটি হয় citiesতার প্রত্যাবর্তন মান হিসাবে এটি প্রত্যাখ্যান করে যদি এটি কিছু প্রত্যাখ্যান করে, বা nilকোনও প্রত্যাখ্যান না করা হয়। যদি আপনি সাবধান না হন তবে এটি একটি গোটচা হতে পারে (মন্তব্যগুলিতে এটিকে নির্দেশ করার জন্য নিনজা08কে ধন্যবাদ)।
cities.reject!(&:blank?)? empty?অ্যারেগুলির জন্য
blank?কেবলমাত্র এর মাধ্যমে উপলব্ধ ActiveSupport। স্ট্যান্ডার্ড রুবি ব্যবহার করে String#empty?: রুবি- ডক.আর.আর.কোর্স
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। কারণ :emptynil
আমার প্রকল্পে আমি ব্যবহার 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 ""বা " "আইটেম।
আপনার অ্যারেতে মিশ্র প্রকার থাকলে এখানে একটি সমাধান রয়েছে:
[nil,"some string here","",4,3,2]
সমাধান:
[nil,"some string here","",4,3,2].compact.reject{|r| r.empty? if r.class == String}
আউটপুট:
=> ["some string here", 4, 3, 2]
সবচেয়ে ছোট উপায় 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?)