Go – Map

Go cung cấp kiểu dữ liệu quan trọng khác tên là map. map là một collection không theo thứ tự của cặp từ khoá và giá trị (key – value), dùng để mapping giữa từ khoá và giá trị. Từ khoá là duy nhất trong map, trong khi đó giá trị thì tùy ý. Cấu trúc dữ liệu của map thường được sử dụng để tra cứu nhanh, thu hồi, xóa dữ liệu dựa trên các từ khoá. Nó là một trong những cấu trúc dữ liệu được sử dụng nhiều nhất trong khoa học máy tính.

Khai báo map

map được khai báo sử dụng cú pháp như sau:

Ví dụ, sau đây là khai báo cho key kiểu string và giá trị kiểu int

Giá trị 0 của map là nil. nil map không có từ khoá nào. Ngoài ra, nếu thử thêm từ khoá vào map nil sẽ dẫn đến một kết quả lỗi khi chạy.

Hãy cùng xem ví dụ sau đây:

Kết quả

Nếu bạn bỏ comment câu lệnh m["one hundred"] = 100 chương trình sẽ đưa ra một lỗi như sau.

Do đó, cần phải khởi tạo một map trước khi thêm các phần tử vào cho nó.

Khởi tạo map

Khởi tạo map sử dụng hàm make()

Bạn có thể khởi tạo một map sử dụng hàm được tích hợp sẵn make(). Bạn chỉ cần truyền vào kiểu của map cho hàm make() như ví dụ bên dưới đây. Hàm sẽ trả về một map đã được khởi tạo và sẵn sàng để sử dụng

Hãy cùng xem ví dụ sau:

Kết quả

Khởi tạo map sử dụng literal

map literal là một cách tiện lợi để khởi tạo map với một vài dữ liệu. Bạn chỉ cần truyền các cặp từ khoá – giá trị ngăn cách nhau bằng dấu phẩy bên trong dấu ngoặc nhọn như sau:

Chú ý rằng cần có dấu phẩy ở cuối cùng nếu không trình biên dịch sẽ báo lỗi.

Hãy cùng xem ví dụ sau đây:

Kết quả

Bạn cũng có thể tạo một map trống sử dụng map literal bằng cách để trống dấu ngoặc nhọn

Câu lệnh trên chức năng tương tự như sử dụng hàm make().

Thêm các phần tử (cặp từ khoá-giá trị) trong map

Bạn có thể thêm các phần tử mới cho map được khởi tạo sử dụng cú pháp như sau:

Ví dụ sau khởi tạo một map sử dụng hàm make() và thêm một vài phần tử mới cho nó

Kết quả

Nếu bạn thử thêm từ khoá mà đã tồn tại thì nó sẽ đơn giản chỉ là ghi đè giá trị của từ khoá đã tồn tại.

Lấy gía trị được liên kết với một từ khoá đã cho trong map

Bạn có thể lấy giá trị được liên kết với một từ khoá đã cho trong map bằng cách sử dụng cú pháp m[key]. Nếu key tồn tại trong map, bạn sẽ nhận được giá trị được gán. Nếu không, bạn sẽ nhận được giá trị 0 của kiểu giá trị của map.

Hãy cùng xem ví dụ sau đây

Kết qủa

Trong ví dụ bên trên, do từ khoá “Jack” không tồn tại trong map, nên chúng ta nhận được giá trị 0 của kiểu giá trị, ở đây kiểu string nên giá trị là rỗng. Không giống như các ngôn ngữ khác, chúng ta sẽ không nhận một lỗi nếu từ khoá không tồn tại

Kiểm tra từ khoá tồn tại hay không

Khi bạn muốn lấy giá trị được gán cho một từ khoá cho trước sử dụng cú pháp map[key], nó sẽ trả thêm về một giá trị, là true nếu từ khoá đấy tồn tại trong map, và false nếu không tồn tại.

Nên bạn có thể kiểm tra từ khoá tồn tại trong map sử dụng gán 2 giá trị như sau:

Biến boolean ok sẽ là true nếu từ khoá tồn tại, ngược lại trả về false

Hãy cùng xem ví dụ sau:

Truy cập từ khoá 1001 sẽ trả về "Rajeev" và true, do từ khoá 1001 tồn tại trong map.

Tuy nhiên, nếu bạn truy cập từ khoá không tồn tại, thì map sẽ trả về một string rỗng "" (giá trị 0 của string) và false.

Nếu bạn chỉ muốn kiểm tra xem từ khoá có tồn tại hay không mà không muốn lấy giá trị liên kết với từ khoá, thì bạn có thể sử dụng _ cho biến đầu tiên

Nào hãy cùng xem ví dụ sau đây

Kết quả

Xoá từ khoá khỏi map

Bạn có thể xoá một từ khoá khỏi map sử dụng hàm delete() được tích hợp sẵn. Cú pháp như sau:

Hàm delete() không trả về giá trị. Nó cũng không xử lý gì nếu từ khoá không tồn tại trong map.

Sau đây là toàn bộ ví dụ:

Kết quả

map là kiểu tham chiếu

map là kiểu tham chiếu. Khi bạn gán một map cho một biến mới, cả hai đều cùng tham chiếu đến một cấu trúc dữ liệu cơ bản. Do đó những thay đổi được thực hiện bởi biến này sẽ ảnh hưởng đến biến còn lại

Kết quả

Tương tự nó cũng sẽ được áp dụng khi bạn truyền một map vào một hàm. Mọi thay đổi của map bên trong hàm, cũng anh hưởng đến phía gọi.

Lặp trên map

Bạn có thể thực hiện lặp trên map sử dụng định dạng range của vòng lặp for. Nó cung cấp cho bạn cặp từ khoá, giá trị trong tất cả vòng lặp.

Kết quả

 

You May Also Like

About the Author: Nguyen Dinh Thuc

Leave a Reply

avatar
  Subscribe  
Notify of