嗨,各位朋友们,欢迎来到这篇博客!今天我们将一起踏入 Dart 语言的神奇世界,深入了解 Dart 中的 List 类型。不用担心,我会尽可能用最通俗易懂的语言,让你对 List 有一个更深刻的理解。
Dart 中的 List
List - 让数据变得有趣!
在 Dart 语言中,List 就像一个神奇的盒子,可以放进去各种各样的东西,比如数字、文字,甚至是其他盒子(List)!今天,我们就来揭开 List 的神秘面纱,看看它是如何让数据变得有趣的。
// 创建一个充满数字的盒子
List<int> numbers = [1, 2, 3, 4, 5];
// 创建一个装满水果的盒子
List<String> fruits = ['apple', 'banana', 'orange'];
咦,看起来好像挺简单的吧?方括号里面放东西,逗号分隔,就是一个 List 了!
List 的小魔法
获取盒子的长度
List<int> numbers = [1, 2, 3, 4, 5];
int length = numbers.length;
print('盒子里有多少东西呢?答案是:$length 个!'); // 输出:盒子里有多少东西呢?答案是:5 个!
嘿,这个 length
就像是盒子的秘密标签,告诉你里面到底有多少东西。
拿出盒子里的东西
List<String> fruits = ['apple', 'banana', 'orange'];
String firstFruit = fruits[0];
print('盒子里的第一样东西是什么呢?是:$firstFruit'); // 输出:盒子里的第一样东西是什么呢?是:apple
哎呀,索引就像是盒子的小抽屉,从 0 开始,想拿出哪个就说出它的位置,比如 fruits[0]
就是拿出第一个水果。
往盒子里加新东西
List<String> fruits = ['apple', 'banana', 'orange'];
fruits.add('grape');
print('往盒子里加了一颗葡萄,现在是这样的:$fruits'); // 输出:往盒子里加了一颗葡萄,现在是这样的:[apple, banana, orange, grape]
fruits 盒子里原本有 apple、banana、orange,来了一颗新水果 grape,用 add
方法就能轻松加入盒子。
从盒子里拿掉东西
List<String> fruits = ['apple', 'banana', 'orange'];
fruits.remove('banana');
print('把香蕉拿出去了,盒子里现在是这样的:$fruits'); // 输出:把香蕉拿出去了,盒子里现在是这样的:[apple, orange]
用 remove
方法,就像把盒子里的东西拿出来一样,轻松又方便。
盒子漫游之遍历
遍历就像是打开盒子,逐个看看里面有什么,这可是盒子漫游的时刻!
for 循环遍历
List<int> numbers = [1, 2, 3, 4, 5];
for (int number in numbers) {
print('这个数字是啥呢?是:$number');
}
用 for
循环,一个个数字出来亮相,好像数字们在做小秀一样。
forEach 方法遍历
List<String> fruits = ['apple', 'banana', 'orange'];
fruits.forEach((fruit) {
print('这个水果是啥呢?是:$fruit');
});
forEach
方法更简单,像是盒子里的每个东西都过来和你打招呼,一点都不会掉队。
不得不说,List 可真是个有趣的小伙伴,让我们的数据变得生动起来!
List 的小秘密
在 Dart 的舞台上,List 扮演着一个神奇的角色,但在使用它的过程中,可能会遇到一些小问题。让我们一一解决这些谜题吧!
如何判断 List 是否为空?
List<String> fruits = [];
if (fruits.isEmpty) {
print('哎呀,水果盒子空空如也!');
} else {
print('水果盒子里有${fruits.length}种水果哦!');
}
通过 isEmpty
属性,我们可以轻松地判断 List 是否为空,就像翻开水果盒子看看里面有没有惊喜。
如何查找 List 中的最大值和最小值?
List<int> numbers = [10, 5, 8, 15, 3];
int maxNumber = numbers.reduce((value, element) => value > element ? value : element);
int minNumber = numbers.reduce((value, element) => value < element ? value : element);
print('最大值是:$maxNumber,最小值是:$minNumber');
通过使用 reduce
方法,我们可以像找宝藏一样,找到 List 中的最大值和最小值。
List 的进阶冒险
现在,让我们进入一些高级的 List 冒险,让你的 Dart 旅程更加丰富多彩。
使用 map
转换 List 中的元素
List<int> numbers = [1, 2, 3, 4, 5];
List<int> squaredNumbers = numbers.map((number) => number * number).toList();
print('原始数字列表:$numbers');
print('每个数字的平方列表:$squaredNumbers');
map
方法就像是 List 的魔法师,可以将每个元素进行转换,创造出一个全新的 List。
使用 where
过滤 List 中的元素
List<int> numbers = [1, 2, 3, 4, 5];
List<int> evenNumbers = numbers.where((number) => number % 2 == 0).toList();
print('原始数字列表:$numbers');
print('偶数列表:$evenNumbers');
where
方法就像是一位聪明的导游,可以根据你的喜好,为你筛选出特定的元素。
使用 sort
对 List 进行排序
List<int> numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
numbers.sort();
print('排序后的数字列表:$numbers');
sort
方法就像是整理房间,可以按照顺序排列,让一切井然有序。
使用 contains
判断 List 是否包含某个元素
List<String> fruits = ['apple', 'banana', 'orange'];
bool containsBanana = fruits.contains('banana');
if (containsBanana) {
print('水果盒子里有香蕉哦!');
} else {
print('水果盒子里没有香蕉。');
}
contains
方法就像是查找宝藏的探险者,可以告诉你是否在 List 中找到了特定的元素。
List 的奇妙嵌套
在 Dart 的舞台上,List 可以变得更加神奇,通过嵌套,你可以创建更复杂的数据结构。
List<List<int>> matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
];
print('矩阵的第二行:${matrix[1]}');
这就像是在盒子里装盒子,通过嵌套,我们可以创建出更有趣的数据结构。
使用 List 的小心事项
在使用 List 的冒险中,一些小心事项也需要我们注意。
List 是可变的
在 Dart 中,List 是一位非常随和的小伙伴,你可以随时添加、删除或修改其中的元素。但别忘了,有时候要小心,避免意外发生。
List<int> numbers = [1, 2, 3, 4, 5];
numbers[0] = 10;
print('修改后的数字列表:$numbers');
通过索引,我们可以直接修改 List 中的元素值,就像给小伙伴们换了新衣服一样。
避免空指针异常
在冒险的过程中,千万要确保不要走进“越界”的陷阱,以免出现空指针异常。
List<String> fruits = ['apple', 'banana', 'orange'];
if (fruits.length > 2) {
print('第三个水果是:${fruits[2]}');
} else {
print('水果盒子里没有第三个水果。');
}
在这个例子中,我们先判断盒子的大小,再去取第三个元素,确保一切安全。
Dart 中 List 的其他花样
除了上面的操作,List 在 Dart 中还有更多花样,比如在函数中传递多个参数、实现队列和栈等。
使用 List 传递多个参数
void printNumbers(List<int> numbers) {
for (int number in numbers) {
print(number);
}
}
printNumbers([1, 2, 3, 4, 5]);
通过将参数声明为 List 类型,我们可以方便地一次传递多个值给函数,就像给朋友送上一箱好吃的糖果。
实现队列和栈
// 队列(先进先出)
Queue<int> queue = Queue();
queue.addAll([1, 2, 3, 4, 5]);
int firstElement = queue.removeFirst();
print('队列的第一个元素是:$firstElement');
// 栈(后进先出)
List<int> stack = [];
stack.addAll([1, 2, 3, 4, 5]);
int lastElement = stack.removeLast();
print('栈的最后一个元素是:$lastElement');
通过使用 Dart 中的 Queue
类和 List 的 removeFirst
、removeLast
方法,我们可以模拟队列和栈的玩法,就像在玩游戏一样。
在 Dart 的大舞台上,List 是个多才多艺的演员,有了这些花样,你就能更自如地编写出丰富多彩的代码了!
List 魔法手册
在 Dart 的大舞台上,List 扮演着一个强大而灵活的角色。上面的部分我们介绍了 Dart 中 List 的常见用法,但在 Dart 中还有其它的一些属性和用法,接下来,就让我们一起来总结 List 的一些神奇属性和方法吧!
List 常用属性:
属性 | 描述 |
length | 获取 List 的长度 |
reversed | 翻转 List 中的元素 |
isEmpty | 判断 List 是否为空 |
isNotEmpty | 判断 List 是否不为空 |
1. length - 长度
length
属性用于获取 List 的长度,即 List 中元素的个数。
List<int> numbers = [1, 2, 3, 4, 5];
int length = numbers.length;
print('List 的长度是:$length'); // 输出:List 的长度是:5
这个属性非常简单,但在很多场景中都是必不可少的。
2. reversed - 翻转
reversed
属性用于将 List 中的元素翻转。
List<int> numbers = [1, 2, 3, 4, 5];
List<int> reversedNumbers = numbers.reversed.toList();
print('翻转后的数字列表:$reversedNumbers');
这样我们就能得到一个反向排列的 List。
3. isEmpty - 是否为空
isEmpty
属性用于判断 List 是否为空,返回一个布尔值。
List<String> fruits = [];
if (fruits.isEmpty) {
print('水果列表为空!');
} else {
print('水果列表不为空,有${fruits.length}种水果。');
}
这是一个常见的判断,以避免在空列表上执行不必要的操作。
4. isNotEmpty - 是否不为空
相应地,isNotEmpty
属性则判断 List 是否不为空,也返回一个布尔值。
List<String> fruits = ['apple', 'banana', 'orange'];
if (fruits.isNotEmpty) {
print('水果列表不为空,有${fruits.length}种水果。');
} else {
print('水果列表为空!');
}
这两个属性在条件判断中经常被用到。
List 常用方法:
方法 | 描述 |
add | 向 List 的末尾添加一个元素 |
addAll | 将一个 List 中的所有元素添加到另一个 List 的末尾 |
indexOf | 查找 List 中某个特定值的索引,如果未找到则返回 -1 |
remove | 删除 List 中指定值的第一个匹配项 |
removeAt | 删除 List 中指定索引位置的元素 |
fillRange | 修改 List 中一定范围内的元素值 |
insert | 在 List 的指定位置插入一个元素 |
insertAll | 在 List 的指定位置插入另一个 List 中的所有元素 |
toList | 将其他类型的集合转换为 List |
join | 将 List 中的元素连接成一个字符串,可以指定连接符 |
split | 将一个字符串按照指定的分隔符拆分成 List |
forEach | 遍历 List 中的每个元素,对每个元素执行指定的操作 |
map | 对 List 中的每个元素执行指定的操作,并返回一个新的 List |
where | 根据指定的条件过滤 List 中的元素,返回一个新的 List |
any | 检查 List 中是否至少有一个元素满足指定的条件,返回一个布尔值 |
every | 检查 List 中是否所有元素都满足指定的条件,返回一个布尔值 |
1. add - 增加
add
方法用于向 List 的末尾添加一个元素。
List<String> fruits = ['apple', 'banana', 'orange'];
fruits.add('grape');
print('添加葡萄后的水果列表:$fruits');
这是一个简单而常见的操作,用于动态地向 List 中添加元素。
2. addAll - 拼接数组
addAll
方法用于将一个 List 中的所有元素添加到另一个 List 的末尾。
List<int> numbers1 = [1, 2, 3];
List<int> numbers2 = [4, 5, 6];
numbers1.addAll(numbers2);
print('拼接后的数字列表:$numbers1');
这是一个很方便的方法,可以将两个 List 合并成一个。
3. indexOf - 查找
indexOf
方法用于查找 List 中某个特定值的索引,如果未找到则返回 -1。
List<String> fruits = ['apple', 'banana', 'orange'];
int indexOfBanana = fruits.indexOf('banana');
print('香蕉的索引是:$indexOfBanana'); // 输出:香蕉的索引是:1
通过这个方法,我们可以迅速找到某个元素在 List 中的位置。
4. remove - 删除
remove
方法用于删除 List 中指定值的第一个匹配项。
List<String> fruits = ['apple', 'banana', 'orange'];
fruits.remove('banana');
print('去掉香蕉后的水果列表:$fruits');
使用这个方法可以轻松地从 List 中移除指定的元素。
5. removeAt - 删除
removeAt
方法用于删除 List 中指定索引位置的元素。
List<String> fruits = ['apple', 'banana', 'orange'];
fruits.removeAt(1);
print('去掉索引为1的水果后的水果列表:$fruits');
这个方法对于根据索引值删除元素非常有用。
6. fillRange - 修改
fillRange
方法用于修改 List 中一定范围内的元素值。
List<int> numbers = [1, 2, 3, 4, 5];
numbers.fillRange(1, 3, 10);
print('修改范围后的数字列表:$numbers');
这个方法让我们可以在 List 中指定范围内进行批量修改。
7. insert - 指定位置插入
insert
方法用于在 List 的指定位置插入一个元素。
List<String> fruits = ['apple', 'banana', 'orange'];
fruits.insert(1, 'grape');
print('在索引1处插入葡萄后的水果列表:$fruits');
通过这个方法,我们可以灵活地在 List 中的任意位置插入元素。
8. insertAll - 指定位置插入 List
insertAll
方法用于在 List 的指定位置插入另一个 List 中的所有元素。
List<String> fruits = ['apple', 'banana', 'orange'];
fruits.insertAll(1, ['grape', 'kiwi']);
print('在索引1处插入葡萄和猕猴桃后的水果列表:$fruits');
这个方法对于批量插入元素非常方便。
9. toList - 其他类型转换成 List
toList
方法用于将其他类型的集合(如 Set)转换为 List。
Set<int> uniqueNumbers = {1, 2, 3, 4, 5};
List<int> numbersList = uniqueNumbers.toList();
print('Set 转换成 List 后的数字列表:$numbersList');
这个方法对于在不同集合类型之间进行转换很有用。
10. join - List 转换成字符串
join
方法用于将 List 中的元素连接成一个字符串,可以指定连接符。
List<String> fruits = ['apple', 'banana', 'orange'];
String fruitString = fruits.join(', ');
print('水果列表转换成字符串:$fruitString');
通过这个方法,我们可以方便地将 List 转换为可读性更好的字符串。
11. split - 字符串转化成 List
split
方法用于将一个字符串按照指定的分隔符拆分成 List。
String fruitsString = 'apple,banana,orange';
List<String> fruitsList = fruitsString.split(',');
print('字符串转换成水果列表:$fruitsList');
这个方法在处理从文件或网络获取的逗号分隔的数据时非常实用。
12. forEach
forEach
方法用于遍历 List 中的每个元素,对每个元素执行指定的操作。
List<int> numbers = [1, 2, 3, 4, 5];
numbers.forEach((number) {
print('当前数字是:$number');
});
这是一种简洁的方式来遍历 List。
13. map
map
方法用于对 List 中的每个元素执行指定的操作,并返回一个新的 List。
List<int> numbers = [1, 2, 3, 4, 5];
List<int> squaredNumbers = numbers.map((number) => number * number).toList();
print('原始数字列表:$numbers');
print('每个数字的平方列表:$squaredNumbers');
通过这个方法,我们可以方便地对 List 进行转换。
14. where
where
方法用于根据指定的条件过滤 List 中的元素,返回一个新的 List。
List<int> numbers = [1, 2, 3, 4, 5];
List<int> evenNumbers = numbers.where((number) => number % 2 == 0).toList();
print('原始数字列表:$numbers');
print('偶数列表:$evenNumbers');
这是一种强大的方法,可以根据需要筛选 List 中的元素。
15. any
any
方法用于检查 List 中是否至少有一个元素满足指定的条件,返回一个布尔值。
List<int> numbers = [1, 2, 3, 4, 5];
bool hasEvenNumber = numbers.any((number) => number % 2 == 0);
if (hasEvenNumber) {
print('列表中有偶数。');
} else {
print('列表中没有偶数。');
}
这个方法对于检查是否存在符合条件的元素很有用。
16. every
every
方法用于检查 List 中是否所有元素都满足指定的条件,返回一个布尔值。
List<int> numbers = [2, 4, 6, 8, 10];
bool allEvenNumbers = numbers.every((number) => number % 2 == 0);
if (allEvenNumbers) {
print('列表中所有数字都是偶数。');
} else {
print('列表中至少有一个不是偶数。');
}
这个方法对于检查是否所有元素都满足条件很有用。
结语
通过这篇博客,我们深入探讨了 Dart 中 List 的方方面面。从基本操作到高级应用,希望你现在对 Dart 中的 List 有了更清晰的认识。
- 我们学习了如何创建、访问和操作 List。
- 了解了如何遍历 List,并解决了一些常见问题。
- 探讨了一些高级操作,包括转换、过滤和排序。
- 知道了 List 可以嵌套,用于处理更复杂的数据结构。
- 注意了在使用 List 时的一些小细节,避免了一些常见错误。
希望通过这篇博客,你对 Dart 中的 List 有了更深入的理解。在你的 Dart 之旅中,List 将是一个非常有力的工具,帮助你处理各种数据。加油,各位朋友们,愿你们在 Dart 的世界中越走越远!
作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191