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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/669363.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

7、架构-架构的安全性

即使只限定在“软件架构设计”这个语境下&#xff0c;系统安全仍然是一 个很大的话题。我们谈论的计算机系统安全&#xff0c;不仅仅是指“防御系统 被黑客攻击”这样狭隘的安全&#xff0c;还至少应包括&#xff08;不限于&#xff09;以下这些问 题的具体解决方案。 认证&am…

小白教你搭建测试环境(docker部署版)

如何使用docker创建多数据库端口&#xff08;云服务器版&#xff09; 背景&#xff1a; 需要搭建一个测试环境&#xff0c;同时还需要不同的端口映射mysql端口。那么我采用的docker拉取mysql镜像&#xff0c;通过宿主机和docker容器端口映射完成。 准备一台云服务器服务器安装…

[书生·浦语大模型实战营]——训练自己的小助手认知+应用部署到 OpenXLab+复现多模态微调

1.训练自己的小助手认知 微调后的回答&#xff1a; 微调前的回答&#xff1a; 2.应用部署到 OpenXLab 上传的自我认知模型 应用部署在OpenXLab&#xff08;比上次部署方便不少&#xff0c;文档写的更清楚了&#xff0c;棒棒&#xff09;,链接如下应用链接 3.复现多模态…

SLAM精度评估—evo

evo是一款用于SLAM轨迹精度的评估工具。核心功能是&#xff08;1&#xff09;能够绘制&#xff08;传感器运动&#xff09;轨迹&#xff0c;&#xff08;2&#xff09;评估估计轨迹与真值&#xff08;ground truth&#xff09;的误差。evo支持多种数据集的轨迹格式(TUM、KITT、…

php之文件操作代码审计

1 PHP文件操作函数 1.1 PHP文件操作函数 文件包含 include/require/include_once/require_once 文件读取 file_get_contents/fread/readfile/file 文件写入 file_put_contents/fwrite/mkdir/fputs 文件删除 unlink/rmdir 文件上传 move_uploaded_file/copy/rename 1.2 文…

Error CREATEing SolrCore ‘new_core‘ Unable to create core [new_core]

Error CREATEing SolrCore new_core: Unable to create core [new_core] Caused by: Cant find resource solrconfig.xml in classpath or F:\Document_Solr.apache.org\solr-8.11.3\server\solr\new_core

VHDL/CPLD硬件描述语言:2022年做的万年历实验

之前接触过一些硬件描述语言以及VHDL/CPLD的单片机的设计实验&#xff0c;那时是2022年了 这里补写一篇笔记,以记录一下那十多个小时 万年历实验 研究中的心得体会&#xff1a; 说明解释都是个人理解&#xff0c;与标准描述有较大出入...... 目录 输入输出器件的编写: 分频器…

年中汇报季?——一文教会你如何进行数据分析

一、常见的数据分析报告类型 数据分析报告通常可以分为三类&#xff1a;日常分析报告、专题型分析报告和综合性分析报告。前两者是以数据结论建议的格式去撰写&#xff0c;综合性分析报告则是&#xff1a;行业环境调研&#xff08;竞品类产品数据分析&#xff09;自身产品数据…

张大哥笔记:你卖什么,就反着来卖

普通人打工的一生&#xff0c;就是努力工作&#xff0c;买房&#xff0c;买车&#xff0c;送孩子上好的学校&#xff0c;为了孩子不要输在起跑线上&#xff0c;拼命报各种补习班等&#xff0c;这些都是普通人认为的主流价值观文化&#xff0c;也造就了一批批的赚钱机器&#xf…

深度解析 Spring 源码:探秘 CGLIB 代理的奥秘

文章目录 一、CGLIB 代理简介1.1 CGLIB 代理的基本原理和特点1.2 分析 CGLIB 如何通过字节码技术创建代理类 二、深入分析 CglibAopProxy 类的结构2.1 CglibAopProxy 类结构2.2 CglibAopProxy 类源码 三、CGLIB 代理对象的创建过程3.1 配置 Enhancer 生成代理对象3.2 探讨如何通…

【斯坦福因果推断课程全集】1_随机对照试验1

目录 The average treatment effect Difference-in-means estimation IID Sampling and Population Asymptotics Example: The linear model Regression adjustments with a linear model 随机对照试验&#xff08;RCT&#xff09;是统计因果推论的基础。如果有的话&#…

Linux - 文件管理高级 sed

3.处理字符 sed ① sed 默认情况下不会修改原文件内容 ② sed 是一种非交互式的编辑器 3.1 工作原理 将原文件一行一行的进行处理&#xff0c;取出一行&#xff0c;放入“模式空间进行处理”&#xff0c;处理完成之后将结果输出到屏幕上&#xff0c;然后读取下一行&#xf…

瓦罗兰特国际服 外服游玩教程 瓦罗兰特外服下载注册游玩指南

瓦罗兰特国际服 外服游玩教程 瓦罗兰特外服下载注册游玩指南 瓦罗兰特作为当今游戏圈顶流的一款热门FPS。游戏&#xff0c;作为拳头游戏公司划时代的一款游戏。游戏不仅延续了传统FPS游戏的玩法&#xff0c;还添加许多新玩法&#xff0c;这也是游戏可以吸引大批量玩家的原因之…

vulnhub靶场之FunBox-10

一.环境搭建 1.靶场描述 As always, its a very easy box for beginners. This works better on VitualBox rather than VMware 2.靶场下载 Funbox: Under Construction! ~ VulnHub 3.靶场启动 靶场IP地址我们不知道&#xff0c;但是网段我们知道是192.168.2.0/24 二.信息…

Filter和ServletContext和Listener

目录 Filter案例 解决全站乱码问题 登录权限校验 ServletContext对象 Listener&#xff08;监听器&#xff09; Filter案例 解决全站乱码问题 我们每次访问每个servlet都要书写处理请求和响应乱码的代码&#xff0c;这样代码十分冗余&#xff0c;所以我们可以在过滤中 We…

python列表的进阶

小结&#xff1a; # 列表的删除小结&#xff1a; # 删除列表的最后一列 punished students.pop() print(被罚站的人是&#xff1a; punished &#xff0c;同学们引以为戒。)# 根据下标删除 del students[0]#根据名称删除 students.remove(王熙凤)在今天的课程里&#xff0c…

k8s自定义资源你会创建吗

创建自定义资源定义 CustomResourceDefinition 当你创建新的 CustomResourceDefinition&#xff08;CRD&#xff09;时&#xff0c;Kubernetes API 服务器会为你所 指定的每一个版本生成一个 RESTful 的 资源路径。CRD 可以是名字空间作用域的&#xff0c;也可以是集群作用域的…

短剧系统源码:构建互动娱乐的新平台

随着数字媒体的兴起&#xff0c;短剧成为了一种新兴的娱乐形式&#xff0c;它以紧凑的叙事和快速的节奏迎合了现代观众的观看习惯。短剧系统源码的开发&#xff0c;为短剧内容的创作、传播和消费提供了一个全面的技术解决方案。本文将探讨短剧系统源码的关键组成部分及其功能。…

如何让 LightRoom 每次导入照片后不自动弹出 SD 卡 LR

如何让 LightRoom 每次导入照片后不自动弹出 SD 卡 LR 在导入窗口左上角有个选项&#xff1a; 导入后弹出 把这个去掉就可以了

FreeRTOS同步互斥与通信

本章简介&#xff1a; 本章是概述性的内容。可以把多任务系统当做一个团队&#xff0c;里面的每一个任务就相当于团队里的一个人。团队成员之间要协调工作进度(同步)、争用会议室(互斥)、沟通(通信)。多任务系统中所涉及的概念&#xff0c;都可以在现实生活中找到例子。 各类RT…