অ্যারের জন্য খালি নয় চেক করুন: কোন?


189

পদ্ধতি ব্যবহার করে কোনও অ্যারে খালি নেই কিনা তা পরীক্ষা করা কি খারাপ any??

a = [1,2,3]

a.any?
=> true

a.clear

a.any?
=> false

নাকি এটি ব্যবহার করা ভাল unless a.empty??

উত্তর:


246

any?not empty?কিছু ক্ষেত্রে যেমন হয় না ।

>> [nil, 1].any?
=> true
>> [nil, nil].any?
=> false

ডকুমেন্টেশন থেকে:

যদি ব্লকটি দেওয়া না হয়, রুবি {| আপত্তি | এর অন্তর্ভুক্ত ব্লক যুক্ত করে আপত্তি} (এটি কোনও? সত্যের দিকে ফিরে আসবে যদি সংগ্রহের কমপক্ষে কোনও সদস্য মিথ্যা বা শূন্য না হয়)।


8
এর বিপরীতে কোন ফাংশন আছে কি empty??
রকেটআর

12
@ রকেটআর আপনি চেকআউট present?পদ্ধতিটি দেখতে চাইতে পারেন ।
দান্তেটা

15
@ ড্যানটাস্টিক #present?হ'ল কেবল-রেল। বিশুদ্ধ রুবি আপনি পাবেন NoMethodError: undefined method 'present?' for Array
রকেটআর

6
কেবলমাত্র রেলগুলিই নয়, সক্রিয় সমর্থন রেল ছাড়া ব্যবহার করা যেতে পারে, কেবল প্রয়োজন require 'activesupport'
সার্জিও এ।

82

কোনও অ্যারে এর মানগুলি মূল্যায়ন করে trueবা এটি খালি হলে তার মধ্যে পার্থক্য ।

পদ্ধতিটি empty?অ্যারে শ্রেণি থেকে আসে
http://ruby-doc.org/core-2.0.0/Array.html#method-i-empty-3F

অ্যারেতে কিছু রয়েছে কিনা তা পরীক্ষা করতে এটি ব্যবহার করা হয়। এর মধ্যে এমন জিনিসগুলি অন্তর্ভুক্ত রয়েছে যা মূল্যায়ন করেfalse , যেমন nilএবং false

>> a = []
=> []
>> a.empty?
=> true
>> a = [nil, false]
=> [nil, false]
>> a.empty?
=> false
>> a = [nil]
=> [nil]
>> a.empty?
=> false

পদ্ধতিটি any?এনিউমারেবল মডিউল থেকে আসে।
http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-any-3F

এটি অ্যারেতে "কোনও" মান মূল্যায়ন করে কিনা তা মূল্যায়ন করতে ব্যবহৃত হয় true। এই অনুরূপ পদ্ধতি none?, all?এবং one?যেখানে তারা মাত্র দেখতে কতবার সত্য মূল্যায়ন করা যেতে পারে চেক করুন। একটি অ্যারে পাওয়া মান গণনা সঙ্গে কোন সম্পর্ক নেই।

মামলা 1

>> a = []
=> []
>> a.any?
=> false
>> a.one?
=> false
>> a.all?
=> true
>> a.none?
=> true

কেস 2

>> a = [nil, true]
=> [nil, true]
>> a.any?
=> true
>> a.one?
=> true
>> a.all?
=> false
>> a.none?
=> false

কেস 3

>> a = [true, true]
=> [true, true]
>> a.any?
=> true
>> a.one?
=> false
>> a.all?
=> true
>> a.none?
=> false

31

বিস্ময়বোধক চিহ্ন দিয়ে বিবৃতি উপসর্গ করা আপনাকে অ্যারেটি খালি নয় কিনা তা জানতে দেবে। সুতরাং আপনার ক্ষেত্রে -

a = [1,2,3]
!a.empty?
=> true

27
দ্বিগুণ অবহেলা? আপনি গুরুতর?
3lvis

29
তিনি তাই সিরিয়াস নন!
আলেকজান্ডার বার্ড

5
হে হে। দ্বিগুণ প্রত্যাখ্যান আদর্শ নয়, এই নির্দিষ্ট ক্ষেত্রে আরও পাঠযোগ্য বলে মনে হচ্ছে।
ডেনি আব্রাহাম চেরিয়ান

11
দ্বিগুণ নেতিবাচক মূল প্রশ্নের অংশ ছিল "অ্যারের জন্য খালি নয় পরীক্ষা করুন"। এই প্রশ্নের উত্তর।
mattfitzgerald

30

any?বড় অ্যারে জন্য এড়ানো ।

  • any? হয় O(n)
  • empty? হয় O(1)

any? দৈর্ঘ্য পরীক্ষা করে না তবে সত্যবাদী উপাদানগুলির জন্য পুরো অ্যারেটি স্ক্যান করে।

static VALUE
rb_ary_any_p(VALUE ary)
{
  long i, len = RARRAY_LEN(ary);
  const VALUE *ptr = RARRAY_CONST_PTR(ary);

  if (!len) return Qfalse;
  if (!rb_block_given_p()) {
    for (i = 0; i < len; ++i) if (RTEST(ptr[i])) return Qtrue;
  }
  else {
    for (i = 0; i < RARRAY_LEN(ary); ++i) {
        if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) return Qtrue;
    }
  }
  return Qfalse;
}

empty? অন্যদিকে কেবল অ্যারের দৈর্ঘ্য পরীক্ষা করে।

static VALUE
rb_ary_empty_p(VALUE ary)
{
  if (RARRAY_LEN(ary) == 0)
    return Qtrue;
  return Qfalse;
}

পার্থক্যটি প্রাসঙ্গিক যদি আপনার কাছে "স্পার্স" অ্যারে থাকে যা প্রচুর nilমান দিয়ে শুরু হয় যেমন উদাহরণস্বরূপ একটি অ্যারে যা সদ্য তৈরি হয়েছিল।


এই ব্যবহারের ক্ষেত্রে পার্থক্যটি কেবলমাত্র তখনই প্রাসঙ্গিক যে আপনার কাছে "স্পার্স" অ্যারে রয়েছে যা প্রচুর nilমানের সাথে শুরু হয় , "অ্যালার্ম" অ্যারে any?দিয়ে প্রথম উপাদানটিতে ব্লক রিটার্ন ব্যতীত, তাই জটিলতা এখনও empty?পদ্ধতির মতো হে (1)
ডেভিড কোস্টা

4

আমি ব্যবহার করার পরামর্শ দিচ্ছি unlessএবংblank করার যাচাই করার জন্য খালি কিনা।

উদাহরণ:

unless a.blank?
  a = "Is not empty"
end

এটি 'ক' খালি জানতে পারবে না। যদি 'ক' ফাঁকা থাকে তবে নীচের কোডটি চলবে না।


4
#blank?রেলের অংশ। যদি তারা ইতিমধ্যে রেলগুলি ব্যবহার করে তবে তা #present?হ'ল উপেক্ষা #blank?
ইভা

0

আমি এটি ব্যবহার করা মোটেই খারাপ মনে করি না any?। আমি এটি অনেক ব্যবহার করি। এটা পরিষ্কার এবং সংক্ষিপ্ত।

তবে যদি আপনি সমস্ত nilমানগুলি এড়িয়ে দেওয়ার বিষয়ে উদ্বিগ্ন হন তবে আপনি সত্যিই জিজ্ঞাসা করছেন অ্যারে রয়েছে কিনা size > 0। সেক্ষেত্রে, এই মৃত সহজ এক্সটেনশন (অনুকূলিত নয়, বানর-স্টাইল) আপনাকে নিকটবর্তী করবে।

Object.class_eval do

  def size?
    respond_to?(:size) && size > 0
  end

end

> "foo".size?
 => true
> "".size?
 => false
> " ".size?
 => true
> [].size?
 => false
> [11,22].size?
 => true
> [nil].size?
 => true

এটি মোটামুটি বর্ণনামূলক, যৌক্তিকভাবে জিজ্ঞাসা করা হচ্ছে "এই বিষয়টির কোনও আকার আছে?" এবং এটি সংক্ষিপ্ত, এবং এটি অ্যাক্টিভসপোর্টের প্রয়োজন হয় না। এবং এটি নির্মাণ করা সহজ।

ভাবার জন্য অতিরিক্ত কিছু:

  1. এটি present?অ্যাক্টিভসপোর্টের মতো নয় ।
  2. আপনি হয়ত এর জন্য একটি কাস্টম সংস্করণ চাইবেন String, যা শ্বেত স্পেস (যেমন present?করে) উপেক্ষা করে।
  3. আপনাকে অবশ্যই সেই নামটি চাইতে পারেন length?জন্য Stringবা অন্যান্য ধরনের যেখানে এটি আরো বর্ণনামূলক হতে পারে।
  4. আপনি এটি Integerএবং অন্যান্য Numericধরণের জন্য কাস্টম চাইবেন , যাতে একটি যৌক্তিক শূন্য ফিরে আসে false
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.