Xây dựng một cấu trúc dữ liệu mới: Lưới 2 chiều Python (phần 4)

Thực thi Grid Class: Subscript và tìm kiếm

Các phương thức còn lại thực thi các hoạt động subscript và tìm kiếm trên một lưới.
Toán tử subscript được sử dụng để truy cập một vật tại một vị trí lưới hay để thay thế nó ở đó. Trong
trường hợp truy cập, subscript xuất hiện bên trong một biểu thức, như trong grid[1][2]. Trong trường
hợp này, khi Python thấy [ ] đi theo một object, nó tìm kiếm cho một phương thức tên __getitem__
trong class của object. Phương thức này mong đợi một chỉ mục như một đối số và trả về vật tại chỉ
mục đó trong cấu trúc dữ liệu ngầm. Trong trường hợp của Grid class, phương thức này trả về một nested
list tại chỉ mục đã cho trong list mức đỉnh. List này trình bày một dòng dữ liệu trong lưới. Python
sau đó sử dụng subscript thứ hai trên list này để giành vật tại cột đã cho trong dòng này. Sau đây
là code cho phương thức này:

def __getitem__(self, index):

“””Supports two-dimensional indexing with [][].
Index represents a row number.”””
return self.data[index]

Phương thức này cũng xử lí trường hợp khi subscript xuất hiện bên sườn trái của một phát biểu gán, suốt
một thay thế một vật tại một vị trí đã cho trong một lưới, như trong:

grid[1][2] = 5

Hoạt động tìm kiếm tên find phải lặp qua list các lists của lưới cho đến khi nó tìm thấy vật mục tiêu
hay chạy từ các vật để thẩm định. Code cho thực thi sử dụng mô hình đi qua lưới quen thuộc cái bạn học
trong các học phần trước:

def find(self, value):

“””Returns (row, column) if value is found,
or None otherwise.”””
for row in range(self.getHeight()):

for column in range(self.getWidth()):

if self[row][column] == value:

return (row, column)

return None

Chú ý phương thức này sử dụng như thế nào các subscripts với self hơn là self.data. Ở dây chúng ta
tận dụng thực tế rằng các subscripts bây giờ làm việc với các grids cũng như các lists.

Chia sẻ