前言
在 Dart 编程中,List 是一种非常常用的数据结构,它允许我们存储和操作有序的对象集合。List 提供了丰富的 API 来满足各种数据操作需求。本文将详细介绍 Dart 中 List 的各种用法和技巧,帮助你在编写 Dart 程序时更加高效。
具体用法
List 的基本用法
创建 List
List<int> numbers = [1, 2, 3, 4, 5];
List<String> fruits = ['apple', 'banana', 'cherry'];
构造函数创建
List<int> emptyList = List<int>.empty(growable: true); // 空列表
//growable: 一个布尔值,表示列表是否可以增长。默认值是 false,表示列表是固定长度的。如果设置为 true,则列表是可增长的
List<int> fixedLengthList = List<int>.filled(5, 0); // 固定长度,初始化为0
List.from:用于创建一个新的列表,并从一个可迭代对象(例如另一个列表、集合等)复制元素
iterable: 要从中复制元素的可迭代对象。
growable: 一个可选的布尔值,表示列表是否可以增长。默认值是 true,表示列表是可增长的。
创建一个新的列表从现有列表
void main() {
// 创建一个源列表
List<int> originalList = [1, 2, 3, 4, 5];
// 使用 List.from 创建一个新的列表
List<int> newList = List.from(originalList);
print(newList); // 输出: [1, 2, 3, 4, 5]
// 修改新的列表,不影响原始列表
newList[0] = 10;
print(originalList); // 输出: [1, 2, 3, 4, 5]
print(newList); // 输出: [10, 2, 3, 4, 5]
}
从集合创建列表
void main() {
// 创建一个源集合
Set<String> fruitSet = {
'apple', 'banana', 'cherry'};
// 使用 List.from 创建一个新的列表
List<String> fruitList = List.from(fruitSet);
print(fruitList); // 输出: ['apple', 'banana', 'cherry']
}
创建一个不可增长的列表
void main() {
// 使用 List.from 创建一个不可增长的列表
List<int> fixedList = List.from([1, 2, 3], growable: false);
print(fixedList); // 输出: [1, 2, 3]
// 尝试添加元素会导致错误
// fixedList.add(4); // 这将抛出异常
}
List.of: 是一个构造函数,用于从一个可迭代对象(例如另一个列表、集合等)创建一个新的列表。与 List.from 类似,List.of 也用于复制元素并生成一个新的 List 对象。它主要用于确保从现有集合创建的列表是分离的,并且可以根据需要指定列表是否可增长。
void main() {
// 创建一个源列表
List<int> originalList = [1, 2, 3, 4, 5];
// 使用 List.of 创建一个新的列表
List<int> newList = List.of(originalList);
print(newList); // 输出: [1, 2, 3, 4, 5]
// 修改新的列表,不影响原始列表
newList[0] = 10;
print(originalList); // 输出: [1, 2, 3, 4, 5]
print(newList); // 输出: [10, 2, 3, 4, 5]
}
List.generate: 是一个构造函数,用于创建一个新的列表,并通过调用一个生成函数来初始化每个元素。这种方法非常适合需要根据某种规则或算法动态生成列表内容的场景
length: 列表的长度,必须是一个非负整数。
generator: 一个函数,用于生成列表的每个元素。这个函数接收一个整数(元素的索引)作为参数,并返回一个元素。
growable: 一个可选的布尔值,表示列表是否可以增长。默认值是 true,表示列表是可增长的。
创建一个简单的数字列表
void main() {
// 使用 List.generate 创建一个包含 0 到 4 的列表
List<int> numbers = List.generate(5, (index) =