গণনাযোগ্য কি?
গণনাযোগ্য হল একটি পুনরাবৃত্তি পদ্ধতির সংগ্রহ , একটি রুবি মডিউল, এবং রুবিকে একটি দুর্দান্ত প্রোগ্রামিং ভাষা করে তোলে তার একটি বড় অংশ৷
গণিতের মধ্যে রয়েছে সহায়ক পদ্ধতি যেমন :
mapselectinject
অসংখ্য পদ্ধতি তাদের একটি ব্লক দিয়ে কাজ করে।
সেই ব্লকে আপনি তাদের বলবেন যে আপনি প্রতিটি উপাদানের সাথে কি করতে চান।
উদাহরণস্বরূপ :
[1,2,3].map { |n| n * 2 }
আপনাকে একটি নতুন অ্যারে দেয় যেখানে প্রতিটি সংখ্যা দ্বিগুণ করা হয়েছে৷
৷
ঠিক কি ঘটবে তা নির্ভর করে আপনি কোন পদ্ধতি ব্যবহার করেন তার উপর, map আপনাকে সমস্ত মান পরিবর্তন করতে সাহায্য করে, select আপনাকে একটি তালিকা ফিল্টার করতে এবং inject করতে দেয় একটি অ্যারের ভিতরে সমস্ত মান যোগ করতে ব্যবহার করা যেতে পারে।
20 টিরও বেশি রুবি গণনাযোগ্য পদ্ধতি রয়েছে৷
আসুন একটি বিস্তারিতভাবে অধ্যয়ন করি।
প্রতিটি_কনস পদ্ধতি
আমার নতুন প্রিয় Enumerable পদ্ধতি হল each_cons !
এখানে কেন :
এই পদ্ধতিটি সত্যিই দরকারী, আপনি এটি ব্যবহার করতে পারেন n-গ্রাম খুঁজে পেতে বা all? এর সাথে মিলিত হলে সংখ্যার একটি ক্রম সংলগ্ন কিনা তা পরীক্ষা করতে। , আরেকটি Enumerable পদ্ধতি।

each_cons আপনাকে n আকারের সাব-অ্যারে দেয় , তাই যদি আপনার [1,2,3] থাকে , তারপর each_cons(2) আপনাকে [[1,2], [2,3]] দেবে .
একটি উদাহরণ দেখা যাক :
numbers = [3,5,4,2]
numbers.sort.each_cons(2).all? { |x,y| x == y - 1 }
এই কোডটি নম্বরগুলি সাজানোর মাধ্যমে শুরু হয়, তারপর each_cons(2) কল করে , যা একটি Enumerator প্রদান করে বস্তু, এবং তারপর এটি all? কল করে সমস্ত উপাদান শর্তের সাথে মেলে কিনা তা পরীক্ষা করার পদ্ধতি৷
এখানে আরেকটি উদাহরণ, যেখানে আমি each_cons ব্যবহার করি একটি অক্ষর একই অক্ষর দ্বারা বেষ্টিত কিনা তা পরীক্ষা করতে, এইভাবে:xyx .
str = 'abcxyx'
str.chars.each_cons(3).any? { |a,b,c| a == c }
আরো আছে!
আপনি যদি জানতে চান যে এই প্যাটার্নটি কতবার ঘটে, পরিবর্তে একটি true পাওয়ার পরিবর্তে / false ফলাফল, আপনি শুধু any? পরিবর্তন করতে পারেন count করতে .
আমার কাছে আরও আকর্ষণীয় বিষয় হল each_cons এর বাস্তবায়ন পদ্ধতি।
array = [] each do |element| array << element array.shift if array.size > n yield array.dup if array.size == n end
দ্রষ্টব্য :এটি
Enumerableএর রুবিনিয়াস বাস্তবায়ন থেকে আসে . আপনি এখানে মূল সোর্স কোড খুঁজে পেতে পারেন।
বাস্তবায়ন একটি খালি রুবি অ্যারে দিয়ে শুরু হয়, তারপর এটি each ব্যবহার করে উপাদানগুলির মাধ্যমে পুনরাবৃত্তি করে .
এখানে পর্যন্ত সবকিছুই বেশ মানসম্মত। কিন্তু তারপরে এটি অ্যারেতে উপাদান যোগ করে এবং এটি অ্যারেকে ছাঁটাই করে (অ্যারে#শিফ্ট ব্যবহার করে) যদি আমরা যা চাই তার থেকে আকার বড় হয়।
মাপ হল each_cons এর আর্গুমেন্ট .
তারপর এটি একটি dup প্রদান করে অ্যারের অনুরোধকৃত আকার থাকলে অ্যারের।
আমি মনে করি এটি জিনিয়াস, কারণ এটি অ্যারে সূচীগুলির সাথে গোলমাল করার পরিবর্তে আমাদের গণনাযোগ্য বস্তুতে একটি 'স্লাইডিং উইন্ডো' ধরণের প্রভাব রাখে৷
আরো আকর্ষণীয় পদ্ধতি
| পদ্ধতি | বিবরণ |
|---|---|
| গণনা | নামটি ঠিক যা বলে, এমন জিনিসগুলিকে গণনা করুন যা একটি ব্লকের মধ্যে সত্য বলে মূল্যায়ন করে |
| group_by | ব্লক রিটার্ন মান দ্বারা গণনাযোগ্য উপাদানগুলিকে গোষ্ঠীভুক্ত করুন। একটি হ্যাশ ফেরত দেয় |
| পার্টিশন | দুটি গ্রুপে বিভাজন। একটি দ্বি-মাত্রিক অ্যারে | প্রদান করে
| কোন? | true ফেরত দেয় যদি ব্লকটি true ফেরত দেয় যেকোন উপাদানের জন্য এটির জন্য |
| সব? | true ফেরত দেয় যদি ব্লকটি true ফেরত দেয় সমস্ত উপাদানের জন্য এটিতে প্রাপ্ত |
| কোনোটি? | all? এর বিপরীত |
| চক্র(n) | সমস্ত উপাদান n বার পুনরাবৃত্তি করুন, তাই যদি আপনি [1,2].cycle(2) করেন আপনার [1,2,1,2] থাকবে |
| খুঁজুন | লাইক select , কিন্তু এটি প্রথম যে জিনিসটি খুঁজে পায় তা ফেরত দেয় |
| ইনজেক্ট করুন | পূর্ববর্তী ব্লক মানের ফলাফল জমা করে এবং পরবর্তীতে এটিকে পাস করে। মোট যোগ করার জন্য দরকারী |
| zip | দুটি অগণিত বস্তুকে একত্রে আঠালো, যাতে আপনি তাদের সাথে সমান্তরালভাবে কাজ করতে পারেন। উপাদান তুলনা করার জন্য এবং হ্যাশ তৈরি করার জন্য দরকারী |
| মানচিত্র | গণনাযোগ্য বস্তুর প্রতিটি উপাদানকে রূপান্তরিত করে এবং একটি অ্যারে হিসাবে নতুন সংস্করণ ফিরিয়ে দেয় |
র্যাপিং আপ
আপনি যেমন দেখেছেন, Enumerable এটি একটি মডিউল যা আয়ত্ত করার যোগ্য, তাই ডকুমেন্টেশনে যান এবং দেখুন এটি আপনার জন্য কী করতে পারে!
আপনি যদি এই নিবন্ধটি উপভোগ করেন তবে নীচের ফর্মটিতে আমার নিউজলেটার ভাগ করতে এবং সদস্যতা নিতে ভুলবেন না। এটা আমাকে অনেক সাহায্য করবে! 🙂