Giả sử chúng ta có một danh sách các số nguyên lồng nhau; chúng ta phải triển khai một trình lặp để làm phẳng nó. Mỗi phần tử là một số nguyên hoặc một danh sách. Các phần tử của danh sách đó cũng có thể là số nguyên hoặc danh sách khác. Vì vậy, nếu đầu vào là [[1, 1], 2, [1, 1]], thì đầu ra sẽ là [1, 1, 2, 1, 1]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Trong phần khởi tạo, nó sẽ lấy danh sách lồng nhau, phần này sẽ hoạt động như sau -
-
đặt res là danh sách trống, index:=0, gọi getVal (nestedList)
-
GetVal () sẽ nhận nestedIntegers, điều này sẽ hoạt động như -
-
cho tôi trong nestedIntegers
-
nếu tôi là một số nguyên, thì hãy chèn i vào mảng res, nếu không thì gọi getVal (danh sách thứ i)
-
-
Phương thức next () sẽ trả về giá trị được trỏ theo chỉ mục và tăng chỉ mục lên 1
-
hasNext () sẽ trả về true, khi có một phần tử bên cạnh nó, ngược lại là false
Ví dụ (Python)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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())
Đầu vào
[[1,1],2,[1,1]]
Đầu ra
1 1 2 1 1