目录
[1. 列表 List](#1. 列表 List)
[1.1 初始](#1.1 初始)
[1.2 声明](#1.2 声明)
[1.2.1 自动](#1.2.1 自动)
[1.2.2 定长](#1.2.2 定长)
[1.2.3 生成数据](#1.2.3 生成数据)
[1.3 属性](#1.3 属性)
[1.4 方法](#1.4 方法)
[1.4.1 添加](#1.4.1 添加)
[1.4.2 查询](#1.4.2 查询)
[1.4.3 删除](#1.4.3 删除)
[1.4.4 Range](#1.4.4 Range)
[1.4.5 洗牌](#1.4.5 洗牌)
[1.4.6 排序](#1.4.6 排序)
[1.4.7 复制子列表](#1.4.7 复制子列表)
[1.4.8 操作符](#1.4.8 操作符)
[2. 集合 Map](#2. 集合 Map)
[2.1 初始](#2.1 初始)
[2.2 声明](#2.2 声明)
[2.2.1 松散](#2.2.1 松散)
[2.2.2 强类型](#2.2.2 强类型)
[2.3 基本属性](#2.3 基本属性)
[2.4 常用方法](#2.4 常用方法)
[2.4.1 addAll](#2.4.1 addAll)
[2.4.2 addEntries](#2.4.2 addEntries)
[2.4.3 containsKey](#2.4.3 containsKey)
[2.4.4 containsValue](#2.4.4 containsValue)
[2.4.5 clear](#2.4.5 clear)
[2.4.6 remove](#2.4.6 remove)
[2.4.7 removeWhere](#2.4.7 removeWhere)
[2.4.8 update](#2.4.8 update)
[2.4.9 updateAll](#2.4.9 updateAll)
[2.5 操作符](#2.5 操作符)
[3. 集合 Set](#3. 集合 Set)
[3.1 声明](#3.1 声明)
[3.1.1 松散](#3.1.1 松散)
[3.1.2 强类型](#3.1.2 强类型)
[3.1.3 去重 & 转列表](#3.1.3 去重 & 转列表)
[3.2 基本属性](#3.2 基本属性)
[3.3 常用方法](#3.3 常用方法)
[3.3.1 交集](#3.3.1 交集)
[3.3.2 联合](#3.3.2 联合)
[4. 枚举 enum](#4. 枚举 enum)
[4.1 定义](#4.1 定义)
[4.2 使用场景](#4.2 使用场景)
1. 列表 List
1.1 初始
Dart
var l = [1, 2, 3];
print(l);
[1, 2, 3]
1.2 声明
1.2.1 自动
Dart
List<int> l = [];
l
..add(1)
..add(2)
..add(3);
print(l);
[1, 2, 3]
使用 cascade operator 连续调用 add 方法
cascade operator
(..
) 用于对同一个对象连续调用多个方法或访问多个属性
1.2.2 定长
Dart
var l = List<int>.filled(3, 0);//空间大小和默认值
l[0] = 1;
l[1] = 2;
l[2] = 3;
print(l);
[1, 2, 3]
1.2.3 生成数据
Dart
List<int> l = List.generate(10, (index) {
return index;
});
print(l);
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
List.generate
是 Dart 的一个工厂构造函数,用于创建并生成固定长度的列表
第一个参数 10
指定生成列表的长度为 10
第二个参数是一个函数,称为生成器函数 (index
是生成器函数的参数),它根据每个索引值生成该索引处的元素
这个生成器函数比较简单:
(index) { return index; }
该函数接收一个参数 index
,返回这个 index
值。因此,每个元素的值与其索引相同
当 List.generate
依次调用这个生成器函数时,它会依次传入从 0
到 9
的索引值,结果就是生成一个包含 0
到 9
的整数列表
1.3 属性
Dart
var l = [1, 2, 3];
print(l.first);
print(l.last);
print(l.length);
print(l.isEmpty);
print(l.isNotEmpty);
print(l.reversed);
1
3
3
false
true
(3, 2, 1)
1.4 方法
1.4.1 添加
Dart
List<int> l = [];
l
..add(1)
..addAll([2, 3, 4, 5])
..insert(0, 6)
..insertAll(6, [6, 6])
;
print(l);
[6, 1, 2, 3, 4, 5, 6, 6]
1.4.2 查询
Dart
var l = [6, 1, 2, 3, 4, 5, 6, 6];
print(l.indexOf(5));
print(l.indexWhere((it) => it == 4));
5
4
1.4.3 删除
Dart
var l = [6, 1, 2, 3, 4, 5, 6, 6];
l.remove(6);
print(l);
l.removeAt(5);
print(l);
[1, 2, 3, 4, 5, 6, 6]
[1, 2, 3, 4, 5, 6]
1.4.4 Range
Dart
var l = [6, 1, 2, 3, 4, 5, 6, 6];
l.fillRange(0, 3, 9);
print(l.getRange(0, 5));
(9, 9, 9, 3, 4)
l.fillRange(0, 3, 9)
将把列表 l
的前 3([0,3]位置) 个元素(索引 0, 1, 2)替换为 9
getRange
方法返回一个新的不可变的迭代器,包含从起始索引到结束索引(不包括)的元素
1.4.5 洗牌
Dart
var l = [6, 1, 2, 3, 4, 5, 6, 6];
l.shuffle();
print(l);
l.shuffle();
print(l);
[2, 5, 4, 6, 6, 3, 1, 6]
[6, 4, 6, 5, 2, 3, 6, 1]
调用一下就随机打乱一下
1.4.6 排序
Dart
数字
var l = [6, 1, 2, 3, 4, 5, 6, 6];
l.sort();
print(l);
[1, 2, 3, 4, 5, 6, 6, 6]
日期
List<DateTime> dtList = [];
dtList.addAll([
DateTime.now(),
DateTime.now().add(new Duration(days: -12)),
DateTime.now().add(new Duration(days: -2))
]);
print(dtList);
升序还是降序,目前是升序
dtList.sort((a, b) => a.compareTo(b));
print(dtList);
9
[2022-05-29 16:43:17.802, 2022-05-17 16:43:17.802, 2022-05-27 16:43:17.802]
[2022-05-17 16:43:17.802, 2022-05-27 16:43:17.802, 2022-05-29 16:43:17.802]
1.4.7 复制子列表
Dart
var l = [6, 1, 2, 3, 4, 5, 6, 6];
var l2 = l.sublist(1,4);
print(l2);
[1, 2, 3] l不变
1.4.8 操作符
Dart
var l1 = [1, 2, 3];
var l2 = [4, 5, 6];
print(l1 + l2);
l1[2] = 9;
print(l1[2]);
[1, 2, 3, 4, 5, 6]
9
2. 集合 Map
2.1 初始
key value 形式的集合,也叫键值对
Dart
var a = {'name': 'ducafecat', 'web': 'www.ducafecat.tech'};
print(a);
{name: ducafecat, web: www.ducafecat.tech}
2.2 声明
2.2.1 松散
Dart
var a = Map();
a['name'] = 'ducafecat';
a['web'] = 'www.ducafecat.tech';
a[0] = 'abc';
a[0] = '1231231';
print(a);
{name: ducafecat, web: www.ducafecat.tech, 0: 1231231}
就是有string 有int,key 相同,覆盖数据
2.2.2 强类型
Dart
var a = Map<int, String>();
a[0] = 'java';
a[1] = 'python';
print(a);
{0: java, 1: python}
2.3 基本属性
Dart
var a = {'name': 'ducafecat', 'web': 'www.ducafecat.tech'};
print(a.isEmpty);
print(a.isNotEmpty);
print(a.keys);
print(a.values);
print(a.length);
print(a.entries);
false
true
(name, web)
(ducafecat, www.ducafecat.tech)
2
(MapEntry(name: ducafecat), MapEntry(web: www.ducafecat.tech))
2.4 常用方法
2.4.1 addAll
新增 kv 数据
Dart
b.addAll({'first': 'java', 'second': 'python'});
2.4.2 addEntries
接入另一个 map 集合
Dart
b.addEntries(a.entries);
2.4.3 containsKey
检查 key 是否存在
Dart
print(a.containsKey('name'));
2.4.4 containsValue
检查 value 是否存在
Dart
print(a.containsValue('www.ducafecat.tech'));
2.4.5 clear
清空数据
Dart
b.clear();
2.4.6 remove
删除数据
Dart
a.remove('name');
2.4.7 removeWhere
按条件删除
Dart
a.removeWhere((key,val) => key == 'name');
2.4.8 update
更新数据
Dart
a.update('name', (val) => 'abc');
2.4.9 updateAll
更新批量
Dart
a.updateAll((key, val) => "---$val---");
2.5 操作符
Dart
print(a['name']);
a['name'] = 'abc';
3. 集合 Set
3.1 声明
Set
是一个元素唯一 的有序队列
3.1.1 松散
Dart
var a = Set();
a.add('java');
a.add('php');
a.add('python');
a.add('java');
a.add('sql');
a.add('swift');
a.add('dart');
print(a);
{java, php, python, sql, swift, dart}
自动去重
Dart 允许 Set
中存储的值可以是任意类型。在这个示例中,Set
被使用来存储字符串类型的编程语言
3.1.2 强类型
Dart
var b = <String>{};
b.addAll(['dart', 'c#', 'j#', 'e#']);
print(b);
{dart, c#, j#, e#}
通过使用泛型 <String>
,你可以确保 Set
中的所有元素都是字符串类型。 addAll
方法用于批量添加元素到 Set
中
3.1.3 去重 & 转列表
Dart
var ls = ['dart', 'java', 'c#', 'j#', 'e#', 'java'];
var tags = Set();
tags.addAll(ls);
print(tags);
print(tags.toList());
{dart, java, c#, j#, e#}
[dart, java, c#, j#, e#]
3.2 基本属性
和之前map差不多的就不多说了
3.3 常用方法
3.3.1 交集
Dart
var fd = <String>{"js", "node", "dart", "css", "html", "macos", "docker", "git"};
var ed = <String>{"linux", "docker", "git", "go", "python", "sql", "node", "js", "aws"};
print(fd.intersection(ed));
{js, node, docker, git}
3.3.2 联合
Dart
var fd = <String>{"js", "node", "dart", "css", "html", "macos", "docker", "git"};
var ed = <String>{"linux", "docker", "git", "go", "python", "sql", "node", "js", "aws"};
print(fd.union(ed));
{js, node, dart, css, html, macos, docker, git, linux, go, python, sql, aws}
4. 枚举 enum
4.1 定义
适合用在常量定义,类型比较很方便
Dart
// 定义颜色枚举值
enum ColorType {
none,
red,
green,
blue,
}
void main(List<String> args) {
// 1 接收输入值 red 字符串
var input = "red";
// 2 将输入值转换为 ColorType 枚举类型
var color = ColorType.none;
if (input == "red") {
color = ColorType.red;
} else if (input == "green") {
color = ColorType.green;
} else if (input == "blue") {
color = ColorType.blue;
}
// 3 switch 判断,打印输出
switch (color) {
case ColorType.red:
print(ColorType.red);
break;
case ColorType.green:
print(ColorType.green);
break;
case ColorType.blue:
print(ColorType.blue);
break;
default:
print(ColorType.none);
}
}
4.2 使用场景
定义发帖类型 视频 图片 空
Dart
enum PostType { video, image, none }
业务中判断
Dart
PostType get type {
if (detail.type == POST_TYPE_IMAGE) {
return PostType.image;
} else if (detail.type == POST_TYPE_VIDEO) {
return PostType.video;
} else {
return PostType.none;
}
}
...
if (type == PostType.video && !_hasDetail) {
playlist.insert(0, VideoMedia(detail));
}
...
if (type == PostType.video) {
if (playlist.isEmpty) {
playlist.add(VideoMedia(detail));
} else {
playlist.first.post = detail;
}
}
} finally {
_isLoading = false;
if (type == PostType.video && !_hasDetail) getPostList();
}
创作不易,希望读者三连支持 💖
赠人玫瑰,手有余香 💖