Dart语言基础Map、List、Set操作合辑

简介: Dart语言基础Map、List、Set中数据遍历操作

题记
—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。
Dart语言基础Map、List、Set操作合辑@凡科快图.png

Header1 Header2
CSDN 网易云课堂教程
掘金 EDU学院教程
知乎 Flutter系列文章

Flutter完全采用了Dart语言,所以分析Dart语言基础相当于是学习了Flutter语言基础、
在Dart中,Map用来存储对像类型的数据,List与Set用来存储数组类型的数据。

本文是来描述 Map 、List 、Set中数据的添加 、修改、循环遍历查询的。


1 Dart中的Map

Map用来保存key-value键值对的数据集合, 与Object-C中所说的字典一至,分为无序的HashMap、key的插入顺序的LinkedHashMap、按key的排序顺序的SplayTreeMap,Map的创建实例如下:

// 创建一个Map实例,默认实现是LinkedHashMap。
Map()

// 创建一个LinkedHashMap实例,包含other中的所有键值对。
Map.from(Map other)

// 创建一个Map实例,其中Key和Value由iterable的元素计算得到。
Map.fromIterable(Iterable iterable, {K key(element), V value(element)})

 // 将指定的keys和values关联,创建一个Map实例。
Map.fromIterables(Iterable<K> keys, Iterable<V> values)

 // 使用默认实现LinkedHashMap创建一个严格的Map。
Map.identity()

 // 创建一个不可修改、基于哈希值的Map,包含other所有的项
Map.unmodifiable(Map other)

然后在实际项目中结合数据创建Map实例,创建一个空的Map代码如下:

// 创建一个Map实例, 插入顺序进行排列 默认无数据
  var dic = new Map();
  print(dic);  // {}
  // 创建一个空的Map, Map允许null作为key
  var dic5 = new Map.identity();
  print(dic5);  //{}

创建有一个有初始值的Map,代码如下:

  // 根据一个Map创建一个新的Map, 插入顺序进行排列
  var dic1 = new Map.from({'name': '张三'});
  print(dic1);  // {name: 张三}
 
  // 根据List创建Map, 插入顺序进行排列
  List<int> list = [1, 2, 3];
  // 使用默认方式, key和value都是数组对应的元素
  var dic2 = new Map.fromIterable(list);
  print(dic2);  // {1: 1, 2: 2, 3: 3}


  // 设置key和value的值
  var dic3 = new Map.fromIterable(list, key: (item) => item.toString(), value: (item) => item * item);
  print(dic3);  // {1: 1, 2: 4, 3: 9}

  // 创建一个不可修改、基于哈希值的Map
  var dic6 = new Map.unmodifiable({'name': 张三});
  print(dic6); // {name: 张三}

根据List数据来创建Map,代码如下:

  // 两个数组映射一个字典, 插入顺序进行排列
  List<String> keys = ['name', 'age'];
  var values = [张三, 20];
  // 如果有相同的key值, 后面的值会覆盖前面的值
  var dic4 = new Map.fromIterables(keys, values);
  print(dic4);  // {name: 张三, age: 20}

对于Map来讲,初始化创建时可以赋值也可以是空的,当创建的可变的Map数据集合时,在实际开发中往往会根据不同的操作来修改不同的数据,如下:

  // 根据一个Map创建一个新的Map, 插入顺序进行排列
  // 在这里通过泛型指定 了 Map中的key的类型为 String类型 value是动态的
  Map<String, dynamic> dic1 = new Map.from({'name': '张三'});
  print(dic1);  // {name: 张三}

  //修改name的值 
  dic1['name'] = '李四';
  //向Map中添加新的键值对数据
  dic1['age'] = 23;

然后获取Map中的数据如下操作;

//根据key获取对应的值 
String name = dic1= dic1['name'];

///遍历获取Map中所有的数据
dic1.forEach((key, value) {
  print("${key} is ${value}");
});

2 Dart中的List

对于List与Set来讲,都是用来存储数组类型数据,区别是Set不可保存重复数据,也就是说Set中的数据具有唯一性,在这里只分析List,Set与List的使用方法一至,使用代码如下:

// 创建非固定长度的Lsit
var testList = List();
// 也可以 List testList = List();
print(testList.length); // 0
// 创建固定长度的List
var fixedList = List(4);
print(testList.length); // 4
 
 ///向Lsit中添加数据
testList.add("hello");
testList.add(123);
 
 
// 创建元素类型固定的List
var typeList = List<String>(); // 只能添加字符串类型的元素
 
typeList.add("张三"); // 正确
typeList.add(1); // 错误。类型不正确
 
// 直接赋值 创建List
var numList = [1, 2, 3];

然后获取List中的数据需要通过索引来获取,List中保存的数据索引从0开始计数,代码如下:

///方式一 遍历获取List中的所有数据
testList.forEach((value) {
  //value 就是List中对应的值
});

///方式二 遍历获取List中的所有的数据
for(int i=0;i<testList.length;i++){
  ///根据索引获取List中的数据
  var value = testList[i];
}

//方式三
//while+iterator迭代器遍历,类似Java中的iteator       
while(testList.iterator.moveNext()) {
  //获取对应的值
  var value = testList.iterator.current;
  
}

//方式四 增强for循环
//for-in遍历       
for (var value in testList) {
  //value 就是List中对应的值
}

完毕
公众号 我的大前端生涯

相关文章
|
2月前
|
存储 Dart
Dart的Map类型
Dart的Map类型
27 0
|
7天前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
2天前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
1月前
|
消息中间件 JSON NoSQL
Redis深度解析:核心数据类型之hash、list、set
Redis深度解析:核心数据类型之hash、list、set
|
1月前
|
存储 安全 Java
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
|
2月前
|
分布式计算 DataWorks 监控
DataWorks操作报错合集之遇到“OSERROR: argument list too long”的错误,该如何处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
40 1
|
1月前
|
存储 语音技术 Python
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
|
2月前
|
存储 安全 程序员
老程序员分享:List、Map、Set之间的联系与区别:
老程序员分享:List、Map、Set之间的联系与区别:
|
2月前
|
Dart
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
44 1
|
2月前
|
存储 JavaScript 前端开发
JavaScript进阶-Map与Set集合
【6月更文挑战第20天】JavaScript的ES6引入了`Map`和`Set`,它们是高效处理集合数据的工具。`Map`允许任何类型的键,提供唯一键值对;`Set`存储唯一值。使用`Map`时,注意键可以非字符串,用`has`检查键存在。`Set`常用于数组去重,如`[...new Set(array)]`。了解它们的高级应用,如结构转换和高效查询,能提升代码质量。别忘了`WeakMap`用于弱引用键,防止内存泄漏。实践使用以加深理解。