当前位置: 首页 > news >正文

Flutter基础 -- Dart 语言 -- 列表集合枚举

目录

1. 列表 List

1.1 初始

1.2 声明

1.2.1 自动

1.2.2 定长

1.2.3 生成数据

1.3 属性

1.4 方法

1.4.1 添加

1.4.2 查询

1.4.3 删除

1.4.4 Range

1.4.5 洗牌

1.4.6 排序

1.4.7 复制子列表

1.4.8 操作符

2. 集合 Map

2.1 初始

2.2 声明

2.2.1 松散

2.2.2 强类型

2.3 基本属性

2.4 常用方法

2.4.1 addAll

2.4.2 addEntries

2.4.3 containsKey

2.4.4 containsValue

2.4.5 clear

2.4.6 remove

2.4.7 removeWhere

2.4.8 update

2.4.9 updateAll

2.5 操作符

3. 集合 Set

3.1 声明

3.1.1 松散

3.1.2 强类型

3.1.3 去重 & 转列表

3.2 基本属性

3.3 常用方法

3.3.1 交集

3.3.2 联合

4. 枚举 enum

4.1 定义

4.2 使用场景


1. 列表 List

1.1 初始

var l = [1, 2, 3];
print(l);[1, 2, 3]

1.2 声明

1.2.1 自动

List<int> l = [];
l
..add(1)
..add(2)
..add(3);
print(l);[1, 2, 3]

使用 cascade operator 连续调用 add 方法

cascade operator (..) 用于对同一个对象连续调用多个方法或访问多个属性

1.2.2 定长

  var l = List<int>.filled(3, 0);//空间大小和默认值l[0] = 1;l[1] = 2;l[2] = 3;print(l);[1, 2, 3]

1.2.3 生成数据

  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 属性

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 添加

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 查询

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 删除

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

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 洗牌

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 排序

数字
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 复制子列表

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 操作符

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 形式的集合,也叫键值对

var a = {'name': 'ducafecat', 'web': 'www.ducafecat.tech'};print(a);{name: ducafecat, web: www.ducafecat.tech}

2.2 声明

2.2.1 松散

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 强类型

var a = Map<int, String>();
a[0] = 'java';
a[1] = 'python';print(a);{0: java, 1: python}

2.3 基本属性

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 数据

b.addAll({'first': 'java', 'second': 'python'});

2.4.2 addEntries

接入另一个 map 集合

b.addEntries(a.entries);

2.4.3 containsKey

检查 key 是否存在

print(a.containsKey('name'));

2.4.4 containsValue

检查 value 是否存在

print(a.containsValue('www.ducafecat.tech'));

2.4.5 clear

清空数据

b.clear();

2.4.6 remove

删除数据

a.remove('name');

2.4.7 removeWhere

按条件删除

a.removeWhere((key,val) => key == 'name');

2.4.8 update

更新数据

a.update('name', (val) => 'abc');

2.4.9 updateAll

更新批量

a.updateAll((key, val) => "---$val---");

2.5 操作符

print(a['name']);
a['name'] = 'abc';

3. 集合 Set

3.1 声明

Set 是一个元素唯一有序队列

3.1.1 松散

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 强类型

var b = <String>{};
b.addAll(['dart', 'c#', 'j#', 'e#']);print(b);{dart, c#, j#, e#}

通过使用泛型 <String>,你可以确保 Set 中的所有元素都是字符串类型。 addAll 方法用于批量添加元素到 Set 中

3.1.3 去重 & 转列表

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 交集

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 联合

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 定义

适合用在常量定义,类型比较很方便

// 定义颜色枚举值
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 使用场景

定义发帖类型 视频 图片 空

enum PostType { video, image, none }

业务中判断

  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();}

创作不易,希望读者三连支持 💖
赠人玫瑰,手有余香 💖

http://www.lryc.cn/news/358754.html

相关文章:

  • 怎么花草识别?方法有三种!
  • 【qt】自定义对话框
  • 汽车IVI中控开发入门及进阶(二十二):video decoder视频解码芯片
  • 混沌测试介绍
  • python 单链表创建,遍历
  • 【方法】如何取消PPT“以只读方式打开“?
  • ChatTTS,语气韵律媲美真人的开源TTS模型,文字转语音界的新魁首,对标微软Azure-tts
  • Django企业招聘后台管理系统开发实战四
  • APP上架 篇一:上架资质要求
  • C++入门之类和对象
  • html中table的替代方案
  • 单片机的自动化编程语言:深度探索与未来展望
  • k8s 部署 Dashboard
  • HTTP/超文本传输协议(Hypertext Transfer Protocol)及HTTP协议通信步骤介绍和请求、响应阶段详解;
  • 【机器学习】随机森林:深度解析与应用实践
  • pytorch使用tensorboardX面板自动生成模型结构图和各类可视化图像
  • C# 键值对
  • android 应用安装目录
  • Centos 7 安装刻录至硬件服务器
  • 动手学深度学习4.6 暂退法-笔记练习(PyTorch)
  • C++ 头文件优化
  • DataRockMan洛克先锋OZON选品工具
  • 【MySQL精通之路】全文搜索(9)-全文解析器-MeCab
  • 【工具】 MyBatis Plus的SQL拦截器自动翻译替换“?“符号为真实数值
  • RT-DETR:端到端的实时Transformer检测模型(目标检测+跟踪)
  • OrangePi Kunpeng Pro开发板初体验——家庭小型服务器
  • AquaCrop农业水资源管理,模拟作物生长过程中水分的需求与消耗
  • 爬虫之re数据清洗
  • 惯性动作捕捉与数字人实时交互/运营套装,对高校元宇宙实训室有何作用?
  • Leecode---栈---每日温度 / 最小栈及栈和队列的相互实现