Dart中常用的集合类型List、Set、Map、Queue

2023-11-18

Dart中常用的集合类型

  1. List:列表,有序集合,可以修改数据。Dart中List对应数组,可以通过索引访问元素。
  2. Set:集合,无序,不可重复。常用于过滤重复数据。
  3. Map:映射,键值对集合。键必须唯一,值可以重复。常用于存储关联数据。
  4. Queue:队列,先入先出的集合。

举例

List:

var list = [1, 2, 3];
list.add(4);  // [1, 2, 3, 4]
list[0];      // 1

Set:

var set = {1, 2, 3};
set.add(2);   // {1, 2, 3}  不可重复
set.add(4);   // {1, 2, 3, 4}

Map:

var map = {'a': 1, 'b': 2};
map['a'];      // 1
map['c'] = 3;  // {'a': 1, 'b': 2, 'c': 3}

Queue:

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():

var list = [1, 2, 3];
list.forEach(print); // 1  2  3

map():
map()是一个非常有用的Dart集合操作,它允许我们将一个集合中的元素按照转换函数转换为新的形式,这在数据处理和映射中有很广泛的应用。
这是将数据库查询结果映射到Dart模型对象的常用手段。

var list = [1, 2, 3];
var doubled = list.map((x) => x * 2); 
print(doubled); // [2, 4, 6]

where():

var list = [1, 2, 3, 4];
var even = list.where((x) => x % 2 == 0);
print(even); // [2, 4]

reduce():
reduce()是一个极为有用的集合方法,它的作用是:
将集合中的元素组合为一个单一结果。它通过执行一个函数来组合元素,这个函数有两个参数并返回一个新的组合结果。
其语法为:

someCollection.reduce(combineFunction)
  • someCollection是要减少的集合,可以是List、Set等
  • combineFunction是一个函数,用于组合两个元素并返回结果
  • reduce()返回最终的单一结果
    例如,数组求和可以使用reduce():
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():

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中的每个元素

var set = {'a', 'b', 'c'};
set.forEach(print); 
// a 
// b
// c

map(): 将每个元素转换为新元素,返回Set

var set = {1, 2, 3};
var doubled = set.map((x) => x * 2);
print(doubled); // {2, 4, 6}

where(): 过滤Set中的元素,返回符合条件的元素Set

var set = {1, 2, 3, 4};
var even = set.where((x) => x % 2 == 0);
print(even); // {2, 4}

reduce(): 对Set中的元素执行组合操作,返回一个结果

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完全相同的集合方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dart中常用的集合类型List、Set、Map、Queue 的相关文章

  • 自动滚动的实时行情(如 Twitter 的“热门推文”)

    是否有一个好的 Javascript 库可以生成自动滚动列表 例如 Twitter 主页上的 热门推文 最好作为 jQuery 插件 它还应该支持 AJAX 功能 动态添加新列表项 由于我们对现有的解决方案并不满意 因此我们从头开始实施了一
  • Dart:当两个或多个任务等待同一个 Future 时会发生什么

    在 Dart 中 当两个或多个任务等待同一个 Future 时 当 Future 完成时 任务是否按照执行等待的顺序获得通知 运行 即第一个执行等待的任务是第一个运行的 这段代码保证输出2 int res 0 Future
  • 如何仅将填充应用于 Flutter 中 TextField 中的文本?

    没有填充我得到这个结果 有了这样的东西 Padding padding EdgeInsets all 20 0 child TextField 我得到以下结果 可能有点难以看清 但您只需看看边缘的红色徽章即可明白我的意思 我只想用填充来移动
  • python随机字典键,并访问它[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 import random Cards Spade 2 3 4 5 6 7 8 9 10 Jack Queen King
  • Dart 将客户端 Socket 升级为 WebSocket

    Since WebSocket https api dartlang org stable 2 1 0 dart io WebSocket class html在 Dart 中不允许直接设置安全上下文 https api dartlang
  • 执行 set_difference 时出错:变量结果不是结构

    我在函数外部全局声明了一个设置变量 std set
  • 在 Dart 中打印不带括号的列表

    我想在打印时从列表中删除括号 Dart Code void main var lst new List 3 for int i 0 i lt 3 i lst i i print lst 电流输出 0 1 2 预期输出 0 1 2 您可以使用
  • 如何将Python列表分成不等长的子列表?

    我试图将用逗号分隔的元素列表划分为长度不等的块 我该如何划分它 list1 1 2 1 list2 1 1 1 1 1 1 1 2 1 1 1 3 1 1 1 4 list1 包含的元素是我希望将 list2 分成的块的大小 你可以结合以下
  • 以字符集安全的方式获取 Windows 上的进程列表

    这个帖子 https stackoverflow com questions 54686 how to get a list of current open windows process with java给出了一个在 Windows 下
  • Python:我可以修改元组吗?

    我有一个 2 D 元组 实际上我以为 它是一个列表 但错误说它是一个元组 但无论如何 该元组的形式为 浮点数 val prod id 现在我有一个字典 其中包含 key gt prod id 和 value prod name 现在 我想将
  • 如何删除列表中的重复值? [复制]

    这个问题在这里已经有答案了 可能的重复 如何从 Python 列表中删除重复项同时保持顺序 https stackoverflow com questions 480214 how do you remove duplicates from
  • 使用 contains 或循环列表之间有什么大的区别吗?

    性能方面 使用之间真的有很大区别吗 ArrayList contains o 与 foreach iterator LinkedList contains o 与 foreach iterator 当然 对于 foreach iterato
  • 在Python中随机化列表[重复]

    这个问题在这里已经有答案了 我想知道是否有一个好方法来 震动 Python 中的项目列表 例如 1 2 3 4 5 可能会被动摇 随机化 3 1 4 2 5 任何顺序都同样可能 from random import shuffle list
  • Python多重处理使用队列写入同一文件

    我知道 Stack Exchange 上有很多与将多处理结果写入单个文件相关的帖子 并且我在阅读了这些帖子后就开发了我的代码 我想要实现的是并行运行 RevMapCoord 函数并使用 multiprocess queue 将其结果写入一个
  • Flutter更新Appbar中的文本

    我需要帮助更新应用栏中的文本以匹配我当前所在的页面 因此 如果我在 设置 页面中 那么我需要在 AppBar 文本中显示它 我添加代码和屏幕截图是为了更好地解释我想要实现的目标 主dart void main gt runApp MyApp
  • python统计前10名

    使用Python 2 6 我有很大的文本文件 以下是前 3 个条目 但我需要检查超过 50 个用户 html log jeff 1153 3 1 84 625 54 1 2 71 3 2 10 7 58 499 3 5 616 36 241
  • Python列表切片效率

    在下面的代码中 def listSum alist Get sum of numbers in a list recursively sum 0 if len alist 1 return alist 0 else return alist
  • 移动列表中特定元素的简单函数

    我是 Haskell 的新手 我正在尝试弄清楚如何创建一个函数 shift Eq a gt a gt a gt Int gt a shift x h t z 输入 一个通用列表和一个相同类型的元素 x 前提条件 元素x存在于列表中 Outp
  • Java 按日期作为字符串对列表 进行排序

    我有一个类型列表 我想按日期元素对该列表进行排序 我用谷歌搜索 看到了一些具有可比性的解决方案 但是是否有可能在不实现类中接口的情况下做到这一点 我的列表如下所示 列表 id 33 文本 test1 日期 06 02 15 id 81 文本
  • 水平滚动卡片,在颤动中具有捕捉效果

    我想创建一个水平滚动的卡片列表 从左或右滑动时具有捕捉到的效果 每张卡片之间都有一定的间距 适合屏幕 如下图所示 除此之外 这些水平可滚动列表元素应包含在垂直可滚动列表内 我所能实现的只是在遵循 flutter 文档中的示例之后显示水平滚动

随机推荐

  • STM32F407 USART3串口使用DMA接收不定长数据和DMA中断发送

    一 前言 使用DMA通信的好处是 不占用单片机资源 不像普通串口中断 发送一个字节触发一次中断 发送100个字节触发100次中断 接收一个字节触发一次中断 接收200个字节触发200次中断 数据接收完毕触发一次DMA中断 发送数据完毕触发一
  • 如何克服开发团队缺乏专业知识,加速交付高质量项目成品

    持续测试是一个过程 使团队能够在软件开发中建立质量 并加速交付高质量的客户体验 通过持续测试 团队使用自动化测试获得关于代码健康的即时反馈 持续测试使企业能够评估商业风险 最近的行业调查显示 用于跟踪项目进展和成功的首要指标 高测试覆盖率
  • 设计一个能够获取栈中最小值的栈。

    设计一个栈 要求 支持 push pop top 操作 并能在常数时间内检索到栈中最小元素 示例 public Stack
  • 闭包-python

    闭包的概念 在 Python 中 闭包 closure 是一个常见的编程技巧 闭包是指一个函数对象 该函数能够访问其定义域外部的非全局变量 即使这些变量在函数调用时不处于活动状态也可以被访问 def outer func x def inn
  • ScriptManager和UpdatePanel控件的使用

    ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果 其中的UpdatePanel就是设置页面中异步局部更新区域 它必须依赖于ScriptManager存在 因为ScriptManger控件提供了客户
  • DNS 基础知识及 Linux DNS 服务器操作知识

    一 DNS域名结构与域名服务器 域名系统DNS Domain Name System 是因特网使用的命名系统 用来把便于人们使用的机器名字转换成为IP地址 域名系统其实就是名字系统 为什么不叫 名字 而叫 域名 呢 这是因为在这种因特网的命
  • 调用OpenAI接口失败的原因

    谈谈我研究OpenAI的感受 Chatgpt的后台时基于OpenAI研发的 但是国内一直无法使用Chatgpt 2023年2月份研究了OpenAI接口 为了国内能体验ChatGpt 就自己搭建了网站 并集成了几十个接口到自己的网站 也有很多
  • SpringBoot项目启动报错--“xxx程序包不存在“

    问题描述 SpringBoot项目 从主分支拉了一个新的分支 运行时报错xxx程序包不存在 原因分析 因为是从master新拉的分支 里面有以前已经编译好的target 可能是拉过来的分支有些地方没编译到 导致找不到程序包 解决方案 将项目
  • Ubuntu 18.04上安装CMake的简单经验流程

    这篇博客继续第一篇和第二篇的内容 这篇相对简单 按照这里的介绍 https cmake org install 我们直接把CMake的压缩包下载下来 解压后首先运行 bootstrap 如果是在一个比较新的系统上安装 则有可能会报下面的错
  • 【githubshare】无需编写一行代码,即可自动为静态数据集生成只读 API,快速完成静态数据的加载调用

    推荐 GitHub 上一款开源的开发者工具 ROAPI 无需编写一行代码 即可自动为静态数据集生成只读 API 快速完成静态数据的加载调用 GitHub github com roapi roapi 静态数据集所支持的格式 包括 CSV J
  • 学习才是测试猿的永动力!超详细的 pytest 钩子函数 之初始钩子和引导钩子来啦

    前 言 前几篇文章介绍了 pytest 点的基本使用 学完前面几篇的内容基本上就可以满足工作中编写用例和进行自动化测试的需求 从这篇文章开始会陆续给大家介绍 pytest 中的钩子函数 插件开发等等 仔细去看过 pytest 文档的小伙伴
  • OO ALV checkbox更新的问题

    OO ALV在CHECKBOX的处理与FUNCTION ALV有稍微的不同 在调用set table for first display后需要加上以下语句才能实现点击后自动更新内表 CALL METHOD g grid gt registe
  • 【Python开发】python PIL读取图像转换为灰度图及另存为其它格式(也可批量改格式)...

    例如有一幅图 文件名为 a jpg 读取 from PIL import Image 或直接import Image im Image open a jpg 将图片转换成灰度图 im1 im convert L 所以 打开图片并转换成灰度图
  • 基于SVPWM改进的永磁同步电机直接转矩控制二更

    导读 本期对基于SVPWM的永磁同步电机直接转矩控制进行全面的分析和仿真搭建 之后与传统的DTC进行比较 凸显基于SVPWM改进的DTC方法的有效性 如果需要文中的仿真模型 关注微信公众号 浅谈电机控制 留言获取 一 传统直接转矩控制系统存
  • 调试最长的一帧(第23天)

    看看总体进度 第22天通过CUllvisitor创建了渲染树和状态树 并进行必要的剔除 接下来进行排序和优化 RenderStage sort函数时按照前序渲染台 当前渲染台和后续渲染台的顺序进行 其中前序渲染台和后续渲染台通过Camera
  • 一台云服务器怎么挂多个网站吗,一台云服务器怎么挂多个网站

    一台云服务器怎么挂多个网站 内容精选 换一换 通过华为云备案 需要先购买华为云中国大陆节点服务器 用于网站备案使用 后称为 备案服务器 目前可用于华为云备案的服务器 请参见备案服务器 如果您的华为云帐号A中没有可备案的服务器 华为云帐号B中
  • .npmrc给单独包设置源

    1 package json中的dependencies或者devDependencies模块设置要下载包的版本信息 例如 dependencies antv g 3 4 10 2 在 npmrc中设置对应源 antv g registry
  • 通过css去掉input框默认样式

    input 去除阴影 box shadow none 聚焦input的蓝色边框 outline none textarea 禁止拖拽 resize none 去除边框 border none 常用于IOS下移除原生样式 webkit app
  • Java使用opencv计算两个多边形交并比IOU、重叠面积占比

    opencv引入配置看这里https blog csdn net angelpaiy article details 126870213 需要引入的opencv类 import org opencv core Scalar import o
  • Dart中常用的集合类型List、Set、Map、Queue

    Dart中常用的集合类型 List 列表 有序集合 可以修改数据 Dart中List对应数组 可以通过索引访问元素 Set 集合 无序 不可重复 常用于过滤重复数据 Map 映射 键值对集合 键必须唯一 值可以重复 常用于存储关联数据 Qu