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老皮!!!欢迎大家来找我探讨交流👀

相关推荐
太空漫步112 小时前
android社畜模拟器
android
神秘_博士2 小时前
自制AirTag,支持安卓/鸿蒙/PC/Home Assistant,无需拥有iPhone
arm开发·python·物联网·flutter·docker·gitee
陈皮话梅糖@4 小时前
Flutter 网络请求与数据处理:从基础到单例封装
flutter·网络请求
海绵宝宝_4 小时前
【HarmonyOS NEXT】获取正式应用签名证书的签名信息
android·前端·华为·harmonyos·鸿蒙·鸿蒙应用开发
凯文的内存6 小时前
android 定制mtp连接外设的设备名称
android·media·mtp·mtpserver
天若子6 小时前
Android今日头条的屏幕适配方案
android
林的快手8 小时前
伪类选择器
android·前端·css·chrome·ajax·html·json
望佑8 小时前
Tmp detached view should be removed from RecyclerView before it can be recycled
android
xvch10 小时前
Kotlin 2.1.0 入门教程(二十四)泛型、泛型约束、绝对非空类型、下划线运算符
android·kotlin
人民的石头14 小时前
Android系统开发 给system/app传包报错
android