ruby - রুবি-অ্যারে জন্য পরীক্ষা



syntax (5)

সঠিক উপায় কি:

is_array("something") # => false         (or 1)

is_array(["something", "else"]) # => true  (or > 1)

অথবা আইটেম গণনা পেতে?

https://ffff65535.com


আপনি আইটেম কিছু ধারণা আছে এমন কিছু পরে করছি এটা শোনাচ্ছে। আমি এইভাবে Enumerable দেখতে যদি সুপারিশ চাই। যে #count অস্তিত্ব নিশ্চিত করে।

উদাহরণ স্বরূপ,

[1,2,3].is_a? Enumerable
[1,2,3].count

মনে রাখবেন, size , length এবং অ্যারের জন্য সমস্ত কাজ count করার সময় count এখানে সঠিক অর্থ - (উদাহরণস্বরূপ, 'abc'.length এবং 'abc'.size উভয় কাজ, কিন্তু 'abc'.count কাজ করে না যে)।

সতর্কতা: একটি স্ট্রিং is_a? সংখ্যাযুক্ত, তাই সম্ভবত আপনি যা চান তা নয় ... বস্তুর মত অ্যারের আপনার ধারণার উপর নির্ভর করে।


আপনি কি এটি একটি অ্যারে হতে হবে নিশ্চিত? আপনি respond_to?(method) ব্যবহার করতে সক্ষম হবেন তাই আপনার কোডটি একই জিনিসগুলির জন্য কাজ করবে যা অগত্যা অ্যারে নয় (সম্ভবত অন্য কিছু সংখ্যক জিনিস)। আপনি আসলে একটি array প্রয়োজন হলে, তারপর Array#kind\_of? বর্ণনা পোস্ট Array#kind\_of? পদ্ধতি ভাল।

['hello'].respond_to?('each')

একটি Array, জন্য পরীক্ষার পরিবর্তে, আপনি এক-স্তরের Array, যা যাবেন তা কেবল রূপান্তর করুন Array, তাই আপনার কোডটি কেবলমাত্র একটি কেস পরিচালনা করতে হবে।

t = [*something]     # or...
t = Array(something) # or...
def f *x
    ...
end

রুবিতে এমন একটি API সমন্বয় করার বিভিন্ন উপায় রয়েছে যা বস্তু বা অ্যারের অবজেক্টগুলি নিতে পারে, তাই, কোনও অ্যারে থাকলে আপনি জানতে চান কেন অনুমান করছেন, আমার একটি পরামর্শ আছে।

স্প্ল্যাট অপারেটরটিতে প্রচুর যাদু আপনি সন্ধান করতে পারেন, অথবা আপনি কেবল Array(something) কল করতে পারেন যা প্রয়োজন হলে একটি অ্যারে wrapper যোগ করবে। এটি একটি ক্ষেত্রে [*something] অনুরূপ।

def f x
  p Array(x).inspect
  p [*x].inspect
end
f 1         # => "[1]"
f [1]       # => "[1]"
f [1,2]     # => "[1, 2]"

অথবা, আপনি প্যারামিটার ঘোষণায় .flatten ব্যবহার করতে পারেন এবং তারপরে। .flatten , আপনাকে একটি ভিন্ন ধরণের সংগ্রাহক প্রদান করে। (যে ক্ষেত্রে, আপনি কল করতে পারেন। উপরোক্ত .flatten ।)

def f *x
  p x.flatten.inspect
end         # => nil
f 1         # => "[1]"
f 1,2       # => "[1, 2]"
f [1]       # => "[1]"
f [1,2]     # => "[1, 2]"
f [1,2],3,4 # => "[1, 2, 3, 4]"

এবং, ধন্যবাদ gregschlom , এটি Array(x) ব্যবহার করার জন্য কখনও কখনও দ্রুততর হয় কারণ এটি ইতিমধ্যে একটি Array যখন এটি একটি নতুন বস্তু তৈরি করার প্রয়োজন হয় না।


এছাড়াও Array() ব্যবহার করে বিবেচনা করুন। রুবি কমিউনিটি স্টাইল গাইড থেকে :

আপনি একটি অ্যারের হিসাবে আচরণ করতে চান এমন একটি পরিবর্তনশীলের সাথে ডিল করার সময় স্পষ্ট অ্যারে চেক বা [* var] এর পরিবর্তে অ্যারে () ব্যবহার করুন, তবে আপনি নিশ্চিত নন এটি একটি অ্যারের।

# bad
paths = [paths] unless paths.is_a? Array
paths.each { |path| do_something(path) }

# bad (always creates a new Array instance)
[*paths].each { |path| do_something(path) }

# good (and a bit more readable)
Array(paths).each { |path| do_something(path) }

[1,2,3].is_a? Array [1,2,3].is_a? Array সত্য মূল্যায়ন।





syntax