สมมติว่าเรามีรายการจำนวนเต็มซ้อนกัน เราต้องใช้ตัววนซ้ำเพื่อทำให้เรียบ แต่ละองค์ประกอบเป็นจำนวนเต็มหรือรายการ องค์ประกอบของรายการนั้นอาจเป็นจำนวนเต็มหรือรายการอื่นๆ ดังนั้นหากอินพุตเป็นเหมือน [[1, 1], 2, [1, 1]] ผลลัพธ์จะเป็น [1, 1, 2, 1, 1]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ในส่วนเริ่มต้น จะใช้รายการที่ซ้อนกัน ซึ่งจะทำงานดังนี้ −
-
ตั้งค่า res เป็นรายการว่าง index :=0, โทร getVal(nestedList)
-
getVal() จะใช้ nestedIntegers ซึ่งจะทำงานเป็น −
-
สำหรับฉันใน nestedIntegers
-
ถ้าฉันเป็นจำนวนเต็ม ให้ใส่ i ลงในอาร์เรย์ res หรือเรียก getVal(รายการ i)
-
-
วิธี next() จะคืนค่าที่ชี้โดยดัชนี และเพิ่มดัชนีขึ้น 1
-
hasNext() จะคืนค่า จริง เมื่อมีองค์ประกอบอยู่ข้างๆ มิฉะนั้น เท็จ
ตัวอย่าง(Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class NestedIterator(object): def __init__(self, nestedList): self.res = [] self.index = 0 self.getVal(nestedList) #print(self.res) def getVal(self,NestedList): for item in NestedList: if isinstance(item, int): self.res.append(item) else: self.getVal(item) def next(self): self.index+=1 return self.res[self.index-1] def hasNext(self): if self.index == len(self.res): return False return True ob = NestedIterator([[1,1],2,[1,1]]) while ob.hasNext(): print(ob.next())
อินพุต
[[1,1],2,[1,1]]
ผลลัพธ์
1 1 2 1 1