← Back to list

Cấu trúc dữ liệu (collection) dart (flutter)

Cấu trúc dữ liệu là kiểu dữ liệu phức tạp hơn các kiểu dữ liệu thông thường và ngôn ngữ lập trình nào cũng có các kiểu dữ liệu dạng…

codelife · 2023-12-22 08:37 · 0 claps · 10.0 min read
#dart #collection-dart #dart-data-types #flutter #dart-cơ-bản
Open on Medium ↗
Wiki topics: 📱 · Mobile Development

Cấu trúc dữ liệu (collection) dart (flutter)

Cấu trúc dữ liệu là kiểu dữ liệu phức tạp hơn các kiểu dữ liệu thông thường và ngôn ngữ lập trình nào cũng có các kiểu dữ liệu dạng collection. Cùng mình tìm hiểu các kiểu dữ liệu collection ngay trong bài viết này.

I. Collections là gì trong Dart

Collections (Bộ sưu tập) là các cấu trúc dữ liệu được sử dụng để lưu trữ và quản lý tập hợp các phần tử. Dart cung cấp một số loại collections phổ biến như List, Set và Map.

Collections không phải là kiểu dữ liệu: Mà nó được gọi là Collections hoặc các cấu trúc dữ liệu hoặc kiểu dữ liệu phức tạp trong Dart để lưu trữ và quản lý tập hợp các phần tử. Trong Dart, các kiểu dữ liệu như List, Set và Map đại diện cho các loại Collections khác nhau.

Mỗi kiểu dữ liệu trong Collections có các thuộc tính và phương thức riêng để thực hiện các thao tác liên quan đến việc thêm, xóa, truy xuất hoặc sắp xếp các phần tử. Collections cho phép bạn lưu trữ nhiều giá trị trong một biến và làm việc với chúng theo các cách khác nhau tùy thuộc vào yêu cầu của bạn.

II. Các cấu trúc dữ liệu trong Dart

  1. List: List là một collection có thứ tự, cho phép lưu trữ một danh sách các phần tử. List trong Dart có thể chứa các phần tử có cùng hoặc khác kiểu dữ liệu.
  2. Set: Set là một collection không có thứ tự, không chứa các phần tử trùng lặp. Set trong Dart không cho phép các phần tử trùng lặp và không đảm bảo thứ tự của các phần tử.
  3. Map: Map là một collection dùng để ánh xạ giữa các cặp key-value. Mỗi key trong Map là duy nhất và được sử dụng để truy xuất value tương ứng.
  4. Queue: Queue là một collection hỗ trợ các hoạt động thêm và xóa ở cả hai đầu. Nó cung cấp các phương thức như enqueue (thêm phần tử vào cuối), dequeue (loại bỏ phần tử từ đầu) và peek (xem phần tử đầu).
  5. Iterable: Iterable là một giao diện đại diện cho các collection có thể duyệt qua các phần tử bên trong.

Đây là một số collections phổ biến trong Dart. Mỗi collection có các đặc điểm và phương thức riêng để làm việc với dữ liệu. Chi tiết của các collections này mình sẽ trình bày phần sau của bài viết.

III. Dart không có thử được gọi là mảng array

Trong Dart, không có cấu trúc dữ liệu được gọi là “array” như trong một số ngôn ngữ lập trình khác. Tuy nhiên, Dart cung cấp một cấu trúc dữ liệu tương tự gọi là “List” mà mình sẽ đề cập trong mục tiếp theo.

List trong Dart có thể được sử dụng để lưu trữ một tập hợp các phần tử có cùng kiểu dữ liệu. Một List có thể chứa các phần tử theo thứ tự và cho phép truy xuất các phần tử bằng chỉ số. List trong Dart cũng hỗ trợ các phương thức và thuộc tính để thao tác với các phần tử trong List.

Bạn có thể dùng list để thay thế mảng như sau:

List listName = [];

Trong đó:

  • ElementType là kiểu dữ liệu của các phần tử trong List.
  • listName là tên của List.

Ví Dụ:

List numbers = [];
List names = [];

IV. Cấu trúc dữ liệu iterable

Trong Dart, Iterable là một giao diện (interface) đại diện cho các đối tượng có thể lặp qua (iterable objects). Các đối tượng Iterable có thể chứa một tập hợp các phần tử và cho phép lặp qua từng phần tử trong đó.

Một số lớp trong Dart mà implement giao diện Iterable bao gồm List, Set và Queue. Điều này có nghĩa là các đối tượng của các lớp này có thể được sử dụng trong các vòng lặp for-in để lặp qua các phần tử.

Iterable numbers = [1, 2, 3, 4];
numbers.forEach((number) {
  print(number);
});

V. Cấu trúc dữ liệu Enum

Trong Dart, enum (viết tắt của từ “enumeration”) là một cấu trúc dữ liệu đặc biệt được sử dụng để định nghĩa một tập hợp các giá trị hằng số có thể được sử dụng trong chương trình. Để tạo một enum trong Dart, bạn có thể sử dụng từ khóa enum và liệt kê các giá trị hằng số mà enum đó có thể nhận được.

enum Weekday {
  Monday,
  Tuesday,
  Wednesday,
  Thursday,
  Friday,
  Saturday,
  Sunday
}

Sau khi định nghĩa enum, bạn có thể sử dụng các giá trị hằng số trong enum bằng cách truy cập vào chúng bằng tên của enum và tên của giá trị hằng số tương ứng. Như sau:

Weekday today = Weekday.Tuesday;
print(today); // In ra "Weekday.Tuesday"

Ngoài ra enum còn cung cấp cho chúng ta một số tính năng như:

  • Giá trị hằng số trong enum được gán bằng một số nguyên ứng với vị trí của giá trị hằng số trong enum. Ví dụ: Weekday.Monday có giá trị là 0, Weekday.Tuesday có giá trị là 1, và tiếp tục.
  • Bạn có thể sử dụng giá trị hằng số của enum trong các câu lệnh switch-case để xử lý các trường hợp khác nhau dựa trên giá trị của enum.
  • Enum cũng hỗ trợ phương thức values để lấy danh sách tất cả các giá trị hằng số trong enum, và phương thức toString() để chuyển đổi giá trị hằng số thành chuỗi.

VI. Cấu trúc dữ liệu List

Trong Dart, List là một cấu trúc dữ liệu được sử dụng để lưu trữ và quản lý một danh sách các phần tử có thứ tự.

Các bạn khai báo một list như sau:

List listName = [element1, element2, ...];

Trong đó:

  • ElementType: Kiểu dữ liệu của các phần tử trong List.
  • listName: Tên của List.

Ví dụ:

List numbers = [1, 2, 3, 4, 5];
List names = ['Cường', 'Dũng', 'Kiên'];

Các phương thức phổ biến trong List

  1. Truy xuất phần tử trong List: Bạn có thể truy xuất các phần tử trong List bằng cách sử dụng chỉ số (index) của phần tử. Chỉ số bắt đầu từ 0.
List numbers = [1, 2, 3, 4, 5];
int firstNumber = numbers[0]; // Lấy phần tử đầu tiên (1)
int thirdNumber = numbers[2]; // Lấy phần tử thứ ba (3)
  1. Cập nhật giá trị

Bạn có thể thay đổi giá trị của phần tử trong List bằng cách gán giá trị mới cho chỉ số tương ứng.

List numbers = [1, 2, 3, 4, 5];
numbers[0] = 10; // Thay đổi giá trị của phần tử đầu tiên thành 10
  1. Thêm phần tử vào list

Bạn có thể thêm phần tử mới vào List bằng cách sử dụng phương thức add() hoặc addAll()

List numbers = [1, 2, 3];
numbers.add(4); // Thêm phần tử 4 vào cuối List
List numbers = [];
numbers.add(1); // Thêm phần tử 1 vào List
numbers.addAll([2, 3, 4]); // Thêm nhiều phần tử vào List
  1. Xóa phần tử khỏi list

Bạn có thể sử dụng phương thức remove() hoặc removeAt() để xóa một phần tử trong list

List numbers = [1, 2, 3, 4, 5];
numbers.remove(3); // Xóa phần tử có giá trị là 3 khỏi List
numbers.removeAt(0); // Xóa phần tử đầu tiên trong List
  1. Kiểm tra list có rỗng hay không

Bạn có thể kiểm tra xem List có rỗng hay không bằng cách sử dụng phương thức isEmpty().

List numbers = [];
bool isEmpty = numbers.isEmpty; // Kiểm tra xem List có rỗng hay không
  1. Lấy kích thước của list

Bạn có thể lấy số lượng phần tử trong List bằng cách sử dụng thuộc tính length.

List numbers = [1, 2, 3, 4];
int size = numbers.length; // Lấy số lượng phần tử trong List (4)
  1. Duyệt các phần tử trong list

Bạn có thể lặp qua từng phần tử trong List bằng cách sử dụng vòng lặp for-in

List numbers = [1, 2, 3, 4];
for (int number in numbers) {
  print(number);
}

VII. Cấu trúc dữ liệu Set trong Dart

Set là một cấu trúc dữ liệu không có thứ tự và không chứa các phần tử trùng lặp. Set được sử dụng để lưu trữ một tập hợp các giá trị duy nhất.

Để khai báo một Set trong Dart, bạn có thể sử dụng cú pháp sau:

Set setName = {element1, element2, ...};

Trong đó:

  • ElementType: Kiểu dữ liệu của các phần tử trong Set.
  • setName: Tên của Set.

Ví Dụ:

Set numbers = {1, 2, 3, 4, 5};
Set names = {'Alice', 'Bob', 'Charlie'};

Các phương thức phổ biến trong Set

  1. Thêm phần tử vào Set
Set numbers = {1, 2, 3};
numbers.add(4); // Thêm phần tử 4 vào Set
  1. Xóa phần tử ra khỏi Set
Set numbers = {1, 2, 3, 4, 5};
numbers.remove(3); // Xóa phần tử có giá trị là 3 khỏi Set
  1. Kiểm tra sự tồn tại

Bạn có thể kiểm tra xem một phần tử có tồn tại trong Set hay không bằng cách sử dụng phương thức contains()

Set numbers = {1, 2, 3, 4, 5};
bool containsThree = numbers.contains(3); // Kiểm tra xem Set có chứa phần tử 3 hay không
  1. Lấy kích thước của Set

Bạn có thể lấy số lượng phần tử trong Set bằng cách sử dụng thuộc tính length.

Set numbers = {1, 2, 3, 4, 5};
int size = numbers.length; // Lấy số lượng phần tử trong Set
  1. Duyệt các phần tử trong Set

Bạn có thể lặp qua từng phần tử trong Set bằng cách sử dụng vòng lặp for-in.

Set numbers = {1, 2, 3, 4, 5};
for (int number in numbers) {
  print(number);
}

VIII. Cấu trúc dữ liệu Map trong Dart

Map là một cấu trúc dữ liệu ánh xạ key-value. Nó cho phép lưu trữ và truy xuất các giá trị dựa trên một key duy nhất tương ứng với mỗi giá trị.

Để khai báo một Map trong Dart, bạn có thể sử dụng cú pháp sau:

Map mapName = {key1: value1, key2: value2, ...};

Trong đó:

  • KeyType: Kiểu dữ liệu của key trong Map.
  • ValueType: Kiểu dữ liệu của value tương ứng với mỗi key trong Map.
  • mapName: Tên của Map.

Ví dụ:

Map ages = {'Alice': 25, 'Bob': 30, 'Charlie': 35};

Các phương thức phổ biến trong Map

  1. Thêm phần tử

Bạn có thể thêm phần tử mới vào Map bằng cách gán giá trị cho một key chưa tồn tại hoặc cập nhật giá trị của một key đã tồn tại.

Map ages = {};
ages['Alice'] = 25; // Thêm phần tử 'Alice' với giá trị 25 vào Map
ages['Bob'] = 30; // Thêm phần tử 'Bob' với giá trị 30 vào Map
ages['Alice'] = 26; // Cập nhật giá trị của phần tử 'Alice' thành 26
  1. Truy xuất giá trị trong Map

Bạn có thể truy xuất giá trị từ Map bằng cách sử dụng key tương ứng.

Map ages = {'Alice': 25, 'Bob': 30};
int aliceAge = ages['Alice']; // Lấy giá trị tương ứng với key 'Alice' (25)
  1. Xóa phần tử trong Map
Map ages = {'Alice': 25, 'Bob': 30};
ages.remove('Bob'); // Xóa phần tử có key 'Bob' khỏi Map
  1. Kiểm tra tồn tại

Bạn có thể kiểm tra xem một key có tồn tại trong Map hay không bằng cách sử dụng phương thức containsKey()

Map ages = {'Alice': 25, 'Bob': 30};
bool isAliceExists = ages.containsKey('Alice'); // Kiểm tra 'Alice' có tồn tại trong Map hay không
  1. Kiểm tra tồn tại của Key trong Map

Bạn có thể kiểm tra xem một key có tồn tại trong Map hay không bằng cách sử dụng phương thức containsKey().

Map ages = {'Alice': 25, 'Bob': 30};
bool isAliceExists = ages.containsKey('Alice'); // Kiểm tra 'Alice' có tồn tại trong Map hay không

IX. Hàng đợi queue trong Dart

Trong Dart, hàng đợi (Queue) là một cấu trúc dữ liệu được sử dụng để lưu trữ và quản lý các phần tử theo thứ tự vào và ra theo nguyên tắc “First-In-First-Out” (FIFO). Phần tử được thêm vào hàng đợi trước sẽ được lấy ra trước.

Để khai báo một queue các bạn thực hiện như sau:

Queue queueName = Queue();

Trong đó:

  • ElementType: Kiểu dữ liệu của các phần tử trong Queue.
  • queueName: Tên của Queue.

Các phương thức phổ biến trong queue

  1. Thêm phần tử vào queue

Bạn có thể thêm phần tử mới vào Queue bằng cách sử dụng phương thức add() hoặc addAll().

Queue numbers = Queue();
numbers.add(1); // Thêm phần tử 1 vào Queue
numbers.addAll([2, 3, 4]); // Thêm nhiều phần tử vào Queue
  1. Lấy phần tử khỏi queue

Bạn có thể lấy phần tử đầu tiên ra khỏi Queue bằng cách sử dụng phương thức removeFirst()

Queue numbers = Queue();
numbers.addAll([1, 2, 3, 4]);
int firstNumber = numbers.removeFirst(); // Lấy phần tử đầu tiên ra (1)
  1. Kiểm tra sự tồn tại của phần tử

Bạn có thể kiểm tra xem một phần tử có tồn tại trong Queue hay không bằng cách sử dụng phương thức contains().

Queue numbers = Queue();
numbers.addAll([1, 2, 3, 4]);
bool containsThree = numbers.contains(3); // Kiểm tra xem Queue có chứa phần tử 3 hay không

4. Kiểm tra queue có rỗng hay không

Bạn có thể kiểm tra xem Queue có rỗng hay không bằng cách sử dụng phương thức isEmpty()

Queue numbers = Queue();
bool isEmpty = numbers.isEmpty; // Kiểm tra xem Queue có rỗng hay không

5. Lấy kích thước của Queue

Bạn có thể lấy số lượng phần tử trong Queue bằng cách sử dụng thuộc tính length.

Queue numbers = Queue();
numbers.addAll([1, 2, 3, 4]);
int size = numbers.length; // Lấy số lượng phần tử trong Queue (4)
  1. Duyệt queue

Bạn có thể lặp qua từng phần tử trong Queue bằng cách sử dụng vòng lặp for-in.

Queue numbers = Queue();
numbers.addAll([1, 2, 3, 4]);
for (int number in numbers) {
  p

Bạn có thể đọc chuỗi bài viết của mình về Dart tại đây:

[embed]Ngôn ngữ lập trình Dart Edit descriptionmedium.com


메타데이터
post_id
1bd0bbabea06
slug
cấu-trúc-dữ-liệu-collection-dart-flutter-1bd0bbabea06
url
https://medium.com/@cuongdinh008/c%E1%BA%A5u-tr%C3%BAc-d%E1%BB%AF-li%E1%BB%87u-collection-dart-flutter-1bd0bbabea06
canonical_url
https://medium.com/@cuongdinh008/c%E1%BA%A5u-tr%C3%BAc-d%E1%BB%AF-li%E1%BB%87u-collection-dart-flutter-1bd0bbabea06
author_url
https://medium.com/@cuongdinh008
status
ok
fetched_at
2026-07-20 23:04:08