উত্তর:
এটি করার অনেকগুলি উপায় রয়েছে, একটি 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
। কারণ :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
""
বা " "
আইটেম।
আপনার অ্যারেতে মিশ্র প্রকার থাকলে এখানে একটি সমাধান রয়েছে:
[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?)