Dart中常用的集合类型List、Set、Map、Queue

Dart中常用的集合类型List、Set、Map、Queue

Dart中常用的集合类型

  1. List:列表,有序集合,可以修改数据。Dart中List对应数组,可以通过索引访问元素。
  2. Set:集合,无序,不可重复。常用于过滤重复数据。
  3. Map:映射,键值对集合。键必须唯一,值可以重复。常用于存储关联数据。
  4. Queue:队列,先入先出的集合。

举例

List:

java 复制代码
var list = [1, 2, 3];
list.add(4);  // [1, 2, 3, 4]
list[0];      // 1

Set:

java 复制代码
var set = {1, 2, 3};
set.add(2);   // {1, 2, 3}  不可重复
set.add(4);   // {1, 2, 3, 4}

Map:

java 复制代码
var map = {'a': 1, 'b': 2};
map['a'];      // 1
map['c'] = 3;  // {'a': 1, 'b': 2, 'c': 3}

Queue:

java 复制代码
var queue = Queue();
queue.add(1);
queue.add(2);
queue.removeFirst(); // 1, 返回第一个元素 
queue.first;        // 2, 获取第一个元素

除此之外,Dart还提供了UnmodifiableListView、SplayTreeSet、LinkedHashMap等集合类型。 Dart的集合类都实现了Iterable接口,所以可以使用许多共同的方法,如forEach()、map()、where()、reduce()等。 这使得Dart的集合操作非常强大和灵活。

集合常用方法

Dart中的集合类型都实现了Iterable接口,所以拥有许多共同的方法,例如:

  • forEach(): 用于遍历集合中的每个元素,没有返回值
  • map(): 将每个元素转换为新元素,返回转换后的集合
  • where(): 过滤集合中的元素,返回符合条件的元素集合
  • reduce(): 将集合中的元素组合起来,返回一个单一结果

List例子

下面通过例子详细说明每个方法: forEach():

java 复制代码
var list = [1, 2, 3];
list.forEach(print); // 1  2  3

map(): map()是一个非常有用的Dart集合操作,它允许我们将一个集合中的元素按照转换函数转换为新的形式,这在数据处理和映射中有很广泛的应用。 这是将数据库查询结果映射到Dart模型对象的常用手段。

java 复制代码
var list = [1, 2, 3];
var doubled = list.map((x) => x * 2); 
print(doubled); // [2, 4, 6]

将数据库查询结果映射到Dart模型对象,如下图:

where():

java 复制代码
var list = [1, 2, 3, 4];
var even = list.where((x) => x % 2 == 0);
print(even); // [2, 4]

reduce(): reduce()是一个极为有用的集合方法,它的作用是: 将集合中的元素组合为一个单一结果。它通过执行一个函数来组合元素,这个函数有两个参数并返回一个新的组合结果。 其语法为:

java 复制代码
someCollection.reduce(combineFunction)
  • someCollection是要减少的集合,可以是List、Set等
  • combineFunction是一个函数,用于组合两个元素并返回结果
  • reduce()返回最终的单一结果 例如,数组求和可以使用reduce():
java 复制代码
var list = [1, 2, 3];
var sum = list.reduce((a, b) => a + b);
print(sum);  // 6

这里combineFunction为(a, b) => a + b,它会先以a = 1,b = 2计算,得到结果3; 然后a = 3,b = 3得到结果6,这就是最终reduce()返回的结果。 求最大值也可以使用reduce():

java 复制代码
var list = [5, 3, 7, 4];  
var max = list.reduce((a, b) => a > b ? a : b);
print(max); // 7

这里combineFunction通过比较a和b,返回较大者,经过多次执行最终得到最大值7。 所以,总结来说,.reduce()通过执行一个combineFunction,将集合元素两两组合,最终得到一个单一结果。 这是一个实现数组汇总的非常高效简洁的方式。 它经常用于求和、求最大/最小值、计算乘积等操作。不仅仅限于数值,也可以用于字符串的拼接等

这些方法让Dart的集合操作变得异常强大和灵活:

  • 我们可以轻松遍历和过滤集合
  • 将集合元素映射和转换为新元素
  • 通过reduce()实现求和、求最大值等汇总操作 而这些方法均为Iterable的方法,所以List、Set、Map等所有集合类型都共享这些功能。它们可以帮助我们轻松处理和转换数据,实现各种复杂的业务逻辑。

Set例子

我们来看几个使用Set的例子: forEach(): 遍历Set中的每个元素

java 复制代码
var set = {'a', 'b', 'c'};
set.forEach(print); 
// a 
// b
// c

map(): 将每个元素转换为新元素,返回Set

java 复制代码
var set = {1, 2, 3};
var doubled = set.map((x) => x * 2);
print(doubled); // {2, 4, 6}

where(): 过滤Set中的元素,返回符合条件的元素Set

java 复制代码
var set = {1, 2, 3, 4};
var even = set.where((x) => x % 2 == 0);
print(even); // {2, 4}

reduce(): 对Set中的元素执行组合操作,返回一个结果

java 复制代码
var set = {'a', 'b', 'c'};
var concat = set.reduce((x, y) => x + y);
print(concat); // abc

以上示例展示了如何对Dart的Set类型使用这些常用的集合方法。 尽管Set是无序和不可重复的,但是它同样拥有强大的集合功能,这使我们可以方便地:

  • 遍历Set中的所有元素
  • 过滤和转换Set中的元素
  • 通过reduce()组合Set中的元素 事实上,由于Set实现了Iterable接口,所以它拥有与List完全相同的集合方法。

👀关注公众号:Android老皮!!!欢迎大家来找我探讨交流👀

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen3 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone3 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui