ধরুন আমরা একটি ইটারেটর ক্লাস সংজ্ঞায়িত করতে চাই যেটি একটি রান-লেংথ এনকোডেড লোয়ারকেস স্ট্রিং s দিয়ে তৈরি করে, এই ইটারেটরের জন্য দুটি ফাংশন রয়েছে সেগুলি হল −
- next() এটি ইটারেটরে পরবর্তী উপাদান খুঁজে পায়
- hasnext() এটি পরের উপাদানটি উপস্থিত আছে কিনা তা পরীক্ষা করে
সুতরাং, যদি ইনপুটটি s ="2b1a" এর মত হয়, তাহলে s দিয়ে একটি অবজেক্ট তৈরি করুন, তারপর next(), hasnext(), next(), next(), hasnext(), তারপর আউটপুট হবে "b" , সত্য, "b", "a", মিথ্যা।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি কনস্ট্রাক্টর সংজ্ঞায়িত করুন। এটি s লাগবে
- আউটপুট :=একটি নতুন তালিকা
- সংখ্যা :=ফাঁকা স্ট্রিং
- s এর প্রতিটি i এর জন্য, করুন
- যদি আমি বর্ণানুক্রমিক হয়, তাহলে
- আউটপুটের শেষে num সন্নিবেশ করান
- আউটপুটের শেষে i ঢোকান
- সংখ্যা :=ফাঁকা স্ট্রিং
- অন্যথায়,
- সংখ্যা :=সংখ্যা + i
- যদি আমি বর্ণানুক্রমিক হয়, তাহলে
- পরের একটি ফাংশন সংজ্ঞায়িত করুন().
- যদি hasnext() সত্য হয়, তাহলে
- গণনা :=আউটপুট[0]
- অক্ষর :=আউটপুট[1]
- গণনা :=গণনা - 1
- যদি গণনা> 0 হয়, তাহলে
- আউটপুট[0] :=আউটপুট[0] - 1
- অন্যথায়,
- আউটপুট :=আউটপুট[সূচী 2 থেকে শেষ]
- রিটার্ন লেটার
- একটি ফাংশন সংজ্ঞায়িত করুন hasnext().
- আউটপুটের আকার যদি 0 না হয়, তাহলে
- সত্য ফেরান
- মিথ্যে ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
class RunLengthIterator:def __init__(self, s):self.output =[] num ="" এর জন্য i in s:if i.isalpha():self.output.append(int(num)) self.output .append(i) num ="" else:num +=i def next(self):if self.hasnext():count =self.output[0] letter =self.output[1] count -=1 গণনা হলে> 0:self.output[0] -=1 else:self.output =self.output[2:] return letter def hasnext(self):if len(self.output) !=0:return True return Falses =" 2b1a"obj =RunLengthIterator(s)print(obj.next())print(obj.hasnext())print(obj.next())print(obj.next())print(obj.hasnext())পূর্বে>ইনপুট
"2b1a"obj =RunLengthIterator(s)obj.next()obj.hasnext()obj.next()obj.next()obj.hasnext()আউটপুট
bTruebaFalse