const nums = [1, 2, 3, 4]; final squares = nums.map((nums) => nums * nums); print(squares); //(1, 4, 9, 16)

Tìm hiểu về Collections trong Dart

Tìm hiểu về Collections trong Dart


Collection là một khái niệm được dùng cho các kiểu dữ liệu tập hợp trong một ngôn ngữ lập trình nào đó. Các đối tượng của các kiểu dữ liệu đó có thể mang trong mình nhiều đối tượng của các kiểu dữ liệu khác.

1: Phân loại collection

- List : Arrays là một trong những kiến trúc dữ liệu phổ biến và quan trọng nhất của ngôn ngữ lập trình. Tuy nhiên trong ngôn ngữ Dart thì không có Array mà thay vào đó là List. List sẽ có những lợi thế cũng như hạn chế riêng so với Array.List là một tập hợp có thứ tự của các đối tượng. Điều này có nghĩa là mỗi phần tử trong list đều có một vị trí cố định.

- Set :Tập hợp là tập hợp các đối tượng trong đó mỗi đối tượng có thể được khai báo cùng một lúc. Thư viện lõi dart :: cung cấp lớp Set để sử dụng các cơ sở của nó.

-Map : Map là một kiểu Collection chứa các cặp key/value. Map rất quan trọng trong khi làm việc với các Data Provider bởi cần làm việc với JSON.

- Queue : Queue là tập hợp nơi dữ liệu lưu trữ ở định dạng nhập trước xuất trước. Nó có thể được thao tác ở cả hai đầu. Đơn giản, chúng ta có thể nhập phần tử từ một đầu và xóa nó khỏi một đầu khác

2 : Những đặc điểm cơ bản

-List:

  • Là một cấu trúc dữ liệu để sắp xếp thứ tự các đối tượng.
  • Các đối tượng trong List thì có cùng kiểu dữ liệu với nhau
  • Phần tử đầu tiên sẽ có index = 0

-Set:

  • Các phần tử có cùng kiểu dữ liệu
  • Thứ tự các phần tử không ảnh hưởng và không quan trong. Set luôn duy trì một thứ tự đặc biết dựa theo giá trị của các phần tử.
  • index trong Set không có ý nghĩa
  • Set có tốc độ truy cập & xử lý nhanh hơn List. Đặt biệt với các dữ liệu lớn
  • Ta có thể sử dụng các phép toán logic trên Set

-Map:

  • Các phần tử là 1 cặp giá trị, bao gồm key & value
  • Không có yêu cầu về thứ tự trong Map
  • Các key phải cũng kiểu dữ liệu với nha và value cũng vậy
  • Giữa key & value có thể khác kiểu dữ liệu
  • 1 key trong Map là tồn tại duy nhất.
  • Để tìm tới giá trị của một phần tử thì phải dựa vào key của nó

3: Những Higher Order Methods hay dùng trong collection

-  mapping :Đây là toán tử map (hay gọi là mapping) chứ không phải là kiểu dữ liệu Map. Tên tiếng Việt thân thiện sẽ gọi là : Phép ánh xạ

Phép ánh xạ cho một collections sẽ giúp bạn thực hiện một hành động trên từng phần tử của tập hợp, hiểu nôm na như là một vòng lặp. Phương thức map là một anonymous function và kết quả return lại là một collections.

Bài toán : Tạo một danh sách mới với các phần tử sẽ là bình phương của từng phần tử List đã cho

- filtering : Bạn có thể lặp và lọc một tập hợp để thu lại được một tập hợp nhỏ hơn. Chúng ta sử dụng toán tử where. Cách dùng cũng tương tự như map. Nhưng nó sẽ cho phép các phần tử có thể được thêm vào tập hợp mới, nếu thỏa mãn được một điều kiện nào đó.

Bài toán : Lọc các phần tử chẵn trong List

Trong đó:

  • Kết quả trả về là một tập hợp kiểu Iterable
  • Điều kiện lọc ở đây là .isEven tức là lặp ra các phần tử chẵn từ list squares

- reduce : Đây được xem là toán tử hợp nhất. Khi bạn muốn tính toán dựa trên toàn bộ số phần tử của tập hợp.

Bài toán: Tính tổng các phần tử trong tập hợp. Bạn có thể tuỳ ý thực hiện việc tính toán hoặc hợp nhất theo một quy luật nào đó mà bạn nghĩ ra.

Trong đó:

  • Cứ mỗi bước lặp thì sum sẽ được cộng thêm element vào.
  • Sau đó sum sẽ gán lại cho sum ở bước lặp tiếp theo

- sorting : Sorting (sắp xếp) được xem là một trong những toán tử kinh điển của mọi thời đại. Quy luật sắp xếp sẽ dựa trên kiểu dữ liệu của tập hợp mà quyết định. Quan trọng là việc sắp xếp vẫn thực hiện trên chính tập hợp đó, nó sẽ thay đổi thứ tự các phần tử. Và nếu bạn áp dụng chọn const thì sẽ gặp lỗi.

Bài toán : Sắp xếp các kí tự trong mảng :

- Custom sort

Bài toán : Sắp xếp các phần tử trong list theo thứ tự giảm dần

3: Kết luận

Bài blog hôm nay mình đã giới thiệu về:

  • Các collection trong Dart như List, Set Map
  • Các thuộc tính & phương thức cơ bản của chúng
  • Các toán tử nâng cao cho các kiểu dữ liệu tập hợp này


Tham khảo : https://dart.dev/codelabs/iterables