'list.list' is deprecated and shouldn't be used. use a list literal, [], or the list.filled constructor instead.

Trong hầu hết các ngôn ngữ lập trình, mảng là một khái niệm không thể thiếu. Tuy nhiên, ngôn ngữ lập trình Dart không có khái niệm mảng truyền thống, thay vào đó nó sử dụng List [Danh sách] với các tính năng tương tự và bổ xung thêm các tính năng mới.

Sau đây là các đặc điểm của List:

  • Giống như mảng truyền thống, List chứa các phần tử có thứ tự và được đánh chỉ số bắt đầu từ 0.
  • Tuỳ thuộc vào loại List được tạo ra, kích thước của nó là cố định hoặc có khả năng tự động tăng nếu cần thiết.

abstract class List implements EfficientLengthIterable

List là một lớp, vì vậy theo suy nghĩ thông thường để tạo một đối tượng bạn cần sử dụng constructor của nó hoặc phương thức nhà máy tĩnh được cung cấp.

@Deprecated["Use a list literal, [], or the List.filled constructor instead"] external factory List[[int? length]]; external factory List.filled[int length, E fill, {bool growable = false}]; @Since["2.9"] external factory List.empty[{bool growable = false}]; external factory List.from[Iterable elements, {bool growable = true}]; external factory List.of[Iterable elements, {bool growable = true}]; external factory List.generate[int length, E generator[int index], {bool growable = true}]; external factory List.unmodifiable[Iterable elements];

Constructor List[[int?]] đã lỗi thời [deprecated] và được thay thế bởi cú pháp giống như cách tạo mảng truyền thống:

var foo1 = List[]; // Deprecated [error] var bar1 = List[n]; // Deprecated [error] var baz1 = List[0]; // Deprecated [error] List foo2 = List[]; // Deprecated [error] List bar2 = List[n]; // Deprecated [error] List baz2 = List[0]; // Deprecated [error] var foo3 = []; // OK var bar3 = ["One", "Two"]; // OK var foo4 = []; // OK var bar4 = ["One", "Two"]; // OK List foo5 = []; // OK List bar6 = ["One", "Two"]; // OK List foo7 = []; // OK List bar7 = ["One", "Two"]; // OK

external factory List.filled[int length, E fill, {bool growable = false}];

Ví dụ: Tạo một List có thể tăng kích thước [growable], chứa 5 phần tử, tất cả các phần tử là "Foo":

var list1 = List.filled[5, 'Foo', growable: true]; var list2 = List.filled[5, 'Foo', growable: true]; List list3 = List.filled[5, 'Foo', growable: true];

@Since["2.9"] external factory List.empty[{bool growable = false}];

Tạo một List rỗng có thể tăng kích thước [growable].

var list1 = List.empty[growable: true]; var list2 = List.empty[growable: true]; List list3 = List.empty[growable: true]; // Same as: var list4 = []; List list5 = [];

external factory List.of[Iterable elements, {bool growable = true}];

Tạo một đối tượng List chứa tất cả các phần tử của một Iterable.

import 'dart:collection'; void main[] { // A collection containing non-duplicate elements var iterator = Set.identity[]; iterator.add['Tom']; iterator.add['Jerry']; iterator.add['Donald']; var list = List.of[iterator, growable: true]; print[list]; // [Tom, Jerry, Donald] }

external factory List.from[Iterable elements, {bool growable = true}];

Tạo một đối tượng List chứa tất cả các phần tử của một Iterable. Constructor này tương tự như List.of, nhưng nó không có khả năng tự kiểm tra dữ liệu của Iterable đầu vào, vì vậy có thể gây ra lỗi tại thời điểm chạy của chương trình.

void main[] { // A collection containing non-duplicate elements var iterator = Set.identity[]; // Any data type iterator.add['Tom']; // String data type iterator.add['Jerry']; // String data type iterator.add[1000]; // int data type var list = List.from[iterator, growable: true]; // Compile OK!! but Error at runtime. print[list]; }

Unhandled exception: type 'int' is not a subtype of type 'String' #0 new List.from [dart:core-patch/array_patch.dart:40:5] #1 main bin/list_from_ex1.dart:10 #2 _delayEntrypointInvocation. [dart:isolate-patch/isolate_patch.dart:283:19] #3 _RawReceivePortImpl._handleMessage [dart:isolate-patch/isolate_patch.dart:184:12]

external factory List.generate[int length, E generator[int index], {bool growable = true}];

Trả về một danh sách [length] phần tử với các phần tử được sinh ra theo hàm được chỉ định.

Ví dụ: Tạo một List với 5 phần tử, các phần tử được tạo ra dựa trên chỉ số của nó.

import 'dart:collection'; void main[] { // Create a Clousure [Function] var generator = [index] { return 'Element $index'; }; var list = List.generate[5, generator, growable: true ]; print[list]; // [Element 0, Element 1, Element 2, Element 3, Element 4] }

external factory List.unmodifiable[Iterable elements];

E operator [][int index]; void operator []=[int index, E value]; bool operator ==[Object other]; List operator +[List other];

void set first[E value]; void set last[E value]; int get length; set length[int newLength]; Iterable get reversed;

Các phương thức của List:

static List castFrom[List source] => CastList[source]; static void copyRange[List target, int at, List source, [int? start, int? end]] static void writeIterable[List target, int at, Iterable source]; void add[E value]; void addAll[Iterable iterable]; List cast[]; void sort[[int compare[E a, E b]?]]; void shuffle[[Random? random]]; int indexOf[E element, [int start = 0]]; int indexWhere[bool test[E element], [int start = 0]]; int lastIndexWhere[bool test[E element], [int? start]]; int lastIndexOf[E element, [int? start]]; void clear[]; void insert[int index, E element]; void insertAll[int index, Iterable iterable]; void setAll[int index, Iterable iterable]; bool remove[Object? value]; E removeAt[int index]; E removeLast[]; void removeWhere[bool test[E element]]; void retainWhere[bool test[E element]]; List sublist[int start, [int? end]]; Iterable getRange[int start, int end]; void setRange[int start, int end, Iterable iterable, [int skipCount = 0]]; void removeRange[int start, int end]; void fillRange[int start, int end, [E? fillValue]]; void replaceRange[int start, int end, Iterable replacements]; Map asMap[];

Trả về một đối tượng Map không thể sửa đổi [unmodifiable], với các giá trị 0, 1, 2.. là các khoá và các phần tử của danh sách là các giá trị.

void main[] { var list = ['Tom', 'Jerry', 'Donald']; Map map = list.asMap[]; for[var idx in map.keys] { print['idx: $idx --> ${map[idx]}']; } }

idx: 0 --> Tom idx: 1 --> Jerry idx: 2 --> Donald

Trả về một dạng xem của List này dưới dạng List.

class Person {} class Employee extends Person { String name; Employee[this.name]; } void main[] { var p1 = Employee['Jennifer']; var p2 = Employee['James']; var p3 = Employee['John']; var list = [p1, p2, p3]; // List var empList = list.cast[]; // List for [var emp in empList] { print[emp.name]; } }

static List castFrom[List source] => CastList[source];

Một phương thức tĩnh trả về một dạng xem của một List được chỉ định, dưới dạng List.

class Person {} class Employee extends Person { String name; Employee[this.name]; } void main[] { var p1 = Employee['Jennifer']; var p2 = Employee['James']; var p3 = Employee['John']; var personList = [p1, p2, p3]; // List var empList = List.castFrom[personList]; // List for [var emp in empList] { print[emp.name]; } }

static void copyRange[List target, int at, List source, [int? start, int? end]]

Thay thế các phần tử từ chỉ số [at] của một List bởi các phần tử từ chỉ số [start] đến [end-1] của một Iterable.

Phương thức này có thể ném ra RangeError nếu:

end - start + at > target.length

void main[] { var sourceList = ['Zero', 'One', 'Two', 'Three']; var targetList = ['0', '1', '2', '3', '4', '5']; List.copyRange[targetList, 2, sourceList, 1, 3]; print[targetList]; }

void fillRange[int start, int end, [E? fillValue]];

Thay thế tất cả các phần tử từ chỉ số [start] tới [end-1] bởi [fillValue].

void main[] { var flowers = ['Rose', 'Lily', 'Sunflower', 'Lotus', 'Water Lily', 'Marigold', 'Lavender']; print[flowers]; print[' -- fillRange from index 2 to 5 -- ']; flowers.fillRange[2, 5, 'A']; print[flowers]; }

[Rose, Lily, Sunflower, Lotus, Water Lily, Marigold, Lavender] -- fillRange from index 2 to 5 -- [Rose, Lily, A, A, A, Marigold, Lavender]

int indexWhere[bool test[E element], [int start = 0]];

Trả về chỉ số của phần tử đầu tiên vượt qua kiểm tra được chỉ định.

void main[] { var flowers = ['Rose', 'Lily', 'Sunflower', 'Lotus', 'Water Lily', 'Marigold', 'Lavender']; var test = [String element] => element.contains['L']; // A Closure. var index = flowers.indexWhere[[element] => element.contains['L'], 2]; print['index found: $index --> ${flowers[index]}']; // 3 --> Lotus }

void insertAll[int index, Iterable iterable];

Chèn tất cả các phần tử của một Iterable vào List này tại chỉ số [index].

void main[] { var flowers = ['Rose', 'Lily', 'Sunflower', 'Lotus', 'Snowdrop', 'Marigold', 'Lavender']; print[flowers]; Iterable iterable = ['A', 'B', 'C']; flowers.insertAll[2, iterable]; print[' --- After insertAll --- ']; print[flowers]; }

[Rose, Lily, Sunflower, Lotus, Snowdrop, Marigold, Lavender] --- After insertAll --- [Rose, Lily, A, B, C, Sunflower, Lotus, Snowdrop, Marigold, Lavender]

void removeWhere[bool test[E element]];

Loại bỏ tất cả các phần tử vượt qua kiểm tra được chỉ định.

list_removeWhere_ex1.dart

void main[] { var flowers = ['Rose', 'Lily', 'Sunflower', 'Lotus', 'Water Lily', 'Marigold', 'Lavender']; print[flowers]; var test = [String element] { // A Closure. return element.contains['L'] || element.contains['R']; }; flowers.removeWhere[test]; print[' -- after removing -- ']; print[flowers]; }

[Rose, Lily, Sunflower, Lotus, Water Lily, Marigold, Lavender] -- after removing -- [Sunflower, Marigold]

void replaceRange[int start, int end, Iterable replacements];

Thay thế các phần tử từ chỉ số [start] tới [end-1] của List này bởi các phần tử của Iterable được chỉ định.

list_replaceRange_ex1.dart

void main[] { var flowers = ['Rose', 'Lily', 'Sunflower', 'Lotus', 'Water Lily', 'Marigold', 'Lavender']; print[flowers]; print[' -- Replace elements from index 2 to 5 -- ']; var iterable = ['A', 'B']; // Note: List is subclass of Iterable. flowers.replaceRange[2, 5, iterable]; print[flowers]; // [Rose, Lily, A, B, Marigold, Lavender] }

[Rose, Lily, Sunflower, Lotus, Water Lily, Marigold, Lavender] -- Replace elements from index 2 to 5 -- [Rose, Lily, A, B, Marigold, Lavender]

void retainWhere[bool test[E element]];

Loại bỏ tất cả các phần tử không vượt qua một kiểm tra được chỉ định.

list_retainWhere_ex1.dart

void main[] { var flowers = ['Rose', 'Lily', 'Sunflower', 'Lotus', 'Snowdrop', 'Marigold', 'Lavender']; print[flowers]; var test = [String element] => element.startsWith['S']; // A Clousure. flowers.retainWhere[test]; print[flowers]; }

[Rose, Lily, Sunflower, Lotus, Snowdrop, Marigold, Lavender] -- fillRange from index 2 to 5 -- [Sunflower, Snowdrop]

void setAll[int index, Iterable iterable];

Thay thế các phần tử từ chỉ số [index] của List này bởi các phần tử của một Iterable được chỉ định.

Phương thức này sẽ ném ra RangeError nếu:

iterable.length + index > thisList.length

void main[] { var flowers = ['Rose', 'Lily', 'Sunflower', 'Lotus', 'Snowdrop', 'Marigold', 'Lavender']; print[flowers]; Iterable iterable = ['A', 'B', 'C']; flowers.setAll[2, iterable]; print[' --- After setAll --- ']; print[flowers]; }

[Rose, Lily, Sunflower, Lotus, Snowdrop, Marigold, Lavender] --- After setAll --- [Rose, Lily, A, B, C, Marigold, Lavender]

void shuffle[[Random? random]];

Xáo trộn các phần tử của danh sách này một cách ngẫu nhiên.

import 'dart:math'; void main[] { var list = [1, 2, 3, 4, 5, 6,7]; list.shuffle[]; // print[list]; var random = Random[5]; // seed = 5 list.shuffle[random]; print[list]; }

[4, 2, 5, 6, 7, 3, 1] [3, 7, 6, 2, 5, 4, 1]

static void writeIterable[List target, int at, Iterable source];

Thay thế các phần tử từ chỉ số [at] của một List bởi các phần tử của một Iterable.

Phương thức này sẽ ném ra RangeError nếu:

source.length + at > target.length

list_writeIterable_ex1.dart

void main[] { // Note: List is subclass of Iterable. Iterable sourceIterable = ['Zero', 'One', 'Two', 'Three']; var targetList = ['0', '1', '2', '3', '4', '5', '6', '7']; List.writeIterable[targetList, 2, sourceIterable]; print[targetList]; }

[0, 1, Zero, One, Two, Three, 6, 7]

Video liên quan

Chủ Đề