สมมติว่าเราต้องการกำหนดคลาส iterator ที่สร้างด้วยสตริง encodedlowercase ความยาวรัน พูดว่า s มีสองฟังก์ชันสำหรับ iterator นี้คือ -
- next() ค้นหาองค์ประกอบถัดไปในตัววนซ้ำ
- hasnext() ใช้สำหรับตรวจสอบว่าองค์ประกอบถัดไปมีอยู่หรือไม่
ดังนั้น หากอินพุตเป็น s ="2b1a" ให้สร้างวัตถุด้วย s จากนั้นเรียก next(), hasext(), next(), next(), hashext() ผลลัพธ์จะเป็น "b" , จริง, "b", "a", เท็จ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดคอนสตรัคเตอร์ นี่จะใช้เวลา s
- ผลลัพธ์ :=รายการใหม่
- num :=สตริงว่าง
- สำหรับแต่ละ i ใน s ทำ
- ถ้าฉันเป็นตัวอักษรก็
- แทรก num ที่ส่วนท้ายของเอาต์พุต
- แทรก i ที่ส่วนท้ายของเอาต์พุต
- num :=สตริงว่าง
- มิฉะนั้น
- num :=num + i
- ถ้าฉันเป็นตัวอักษรก็
- กำหนดฟังก์ชัน next()
- ถ้า hasnext() เป็นจริง แล้ว
- จำนวน :=เอาต์พุต[0]
- letter :=output[1]
- นับ :=นับ - 1
- ถ้านับ> 0 แล้ว
- เอาต์พุต[0] :=เอาต์พุต[0] - 1
- มิฉะนั้น
- เอาต์พุต :=เอาต์พุต[จากดัชนี 2 ถึงจุดสิ้นสุด]
- จดหมายส่งคืน
- กำหนดฟังก์ชัน hasnext()
- ถ้าขนาดของเอาต์พุตไม่เป็น 0 แล้ว
- คืนค่า True
- คืนค่าเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
คลาส RunLengthIterator:def __init__(self, s):self.output =[] num ="" for 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 อื่น ๆ:self.output =self.output[2:] return letter def hashext(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