Dart入门——Iterable

Flutter学习之旅,集合Iterable(List、Set、Map)。 Iterable的集合 迭代对象是各种Dart应用程序的基本构建块,即使您没有注意到,您可能已经在使用它们。本文可帮助您充分利用它们。 本文涵盖以下内容: 如何读取Iterable的元素。 如何检查Iterable的元素是否满足条件。 如何过滤Iterable的内容。 如何将Iterable的内容映射到其他值。 什么是集合? 集合是代表一组对象(称为元素)的对象。可迭代对象是一种集合。 集合可以为空,也可以包含许多元素。根据目的,集合可以具有不同的结构和实现。这些是一些最常见的集合类型: 阅读详情


在Dart中Iterable是一个接口,常用的集合类List、Set、Map的遍历都可以通过Iterable来实现。

遍历
void main(){
  
  Iterable<int> a = [4, 5, 6];
  // a的类型实际为List<int>,而List为Iterable的子类
  print(a.runtimeType);
  // foreach遍历
  for(var i in a){
    print(i);
  }
  // 简写
  a.forEach((element) {print(element);});
}
索引取值

Iterable不支持[index]的方式直接通过索引访问,但可以通过elementAt来访问。此外还提供了first和last的语法糖。

Iterable<int> a = [4, 5, 6];
// 打印4
print(a.elementAt(0));
// 打印4
print(a.first);
// 打印6
print(a.last);
// 打印6
print(a.elementAt(d.length - 1));
// 为空情况
Iterable<int> d = [];
// 异常: RangeError (index): Invalid value: Valid value range is empty: 0
print(d.elementAt(0));
// 异常: Bad state: No element
// 虽然文档上说elementAt(0)和first等效,但在异常处理上还是存在不一致。
print(d.first);
// 异常: Bad state: No element
print(d.last);
// 异常: RangeError (index): Invalid value: Valid value range is empty: -1
print(d.elementAt(d.length - 1));
where、firstWhere、singleWhere
  • 可以通过where对数据进行筛选
    void main{
    	Iterable<String> language = ['kotlin', 'java', 'C', 'Dart', 'Python'];
    	// 使用where进行筛选, where中的参数可以通过多种方式传递
    	// 方式1: 表达式
    	// var subList = language.where((element) => element.length >= 5);
    	// 方式2: 代码块
    	// var subList = language.where((element) {
      	//   return element.length >= 5;
      	// });
      	// 方法3: 函数
      	var subList = language.where(predicate);
    	// 打印kotlin和Python
    	subList.forEach((element) => print(element));	
    }
    
  • firstWhere返回符合条件的第一个元素
    var firstElement = language.firstWhere((element) => element.startsWith('D'));
    // 打印Dart
    print(firstElement);
    
    可以通过orElse来指定未找到匹配元素的处理
    // 未找到匹配元素
    var firstElement = language.firstWhere((element) => element.startsWith('S'),
      // 未指定则会抛出StateError异常 
      orElse: ()=>"not found");
    // 打印 not found
    print(firstElement);
    
  • singleWhere 返回符合条件的元素,如果符合条件的超过一个,则抛异常
    // 返回包含D的元素
    var single = language.singleWhere((element) => element.contains('D'));
    // 打印 Dart
    print("single:$single");
    // 抛出异常: Bad state: Too many elements
    // var single = language.singleWhere((element) => element.length > 5);
    
every 和 any
  • every表示每个元素都满足条件时返回true,否则返回false
    // 是否每个元素的长度都大于1
    var result = language.every((element) => element.length > 1);
    // 打印 false ('C'的长度为1)
    print(result)
    
  • any表示任意元素都满足条件时返回true,否则返回false
    var result = language.any((element) => element.length > 2);
    // 打印true
    print(result);
    
takeWhile 和 skipWhile
  • takeWhile 表示不满足条件后遍历结束
    Iterable<String> language = ['kotlin', 'java', 'C', 'Dart', 'Python'];
    var subList = language.takeWhile((value) => value!='C');
    // 打印 kotlin 和 java
    subList.forEach((element) => print(element));
    
  • skipWhile 表示从满足条件的元素开始遍历
    Iterable<String> language = ['kotlin', 'java', 'C', 'Dart', 'Python'];
    var subList = language.skipWhile((value) => value=='C');
    // 打印 C、 Dart、 Python
    subList.forEach((element) => print(element));
    
Mapping

Mapping可以对数据进行转换

var list = [1, 2, 3];
var convertList = list.map((e) => e * 2);
// 打印 4、5、6
convertList.forEach((element) => print(element));
【Dart 教程系列第 51 篇】Iterable 中 reduce 函数的用法 reduce 是 Iterable 的一个方法,用于将集合中的所有元素​​通过指定的操作合并成单个值​​。它需要一个​​二元函数​​(即接收两个参数并返回一个值的函数)。如果列表只有一个元素,则返回该元素。反之则从迭代器的第一个元素开始,按迭代顺序将其与其余元素组合。 阅读详情

相关推荐

【Dart 教程系列第 52 篇】Iterable 中 castFrom 函数的用法

本文介绍了Dart中的List.castFrom方法,这是一种类型安全且高效的列表转换工具。与cast()方法相比,castFrom提供了更明确的类型参数和懒加载的视图模式,仅在访问元素时进行类型检查。文章通过多个实际应用场景(如处理JSON数据、API响应转换和混合类型集合处理)展示了castFrom的用法和优势。该方法特别适合需要运行时类型安全的场景,能有效避免类型转换错误。开发者可以根据具体需求选择使用castFrom或cast方法进行列表类型转换。

“Allen Su”的博客 153

Flutter 小技巧之 Dart 里的 List 和 Iterable 你真的搞懂了吗?

今天我们介绍关于 和 里有趣的知识点 ,你可能会觉得这有什么好介绍,不就是列表吗?但是其实在 Dart 里 和 也是很有意思设定,比如有时候我们可以对 进行 操作,如下代码所示,你觉得运行之后会打印出什么内容? 答案是:什么都不会输出,因为通过 返回一个 的操作(如 \ )的都是 Lazy 的,也就是它们只会在每次“迭代”时才会被调用。比如调用 或者 等方法,就会触发上面的 执行,从而打印出对应的内容,那新问题来了,假如我们把下图四个方法都执行一遍,会输出几次 log ?em··

Dream It Possible 2473

手把手教学:利用AutoDL与vLLM快速部署DeepSeek-R1大模型实战指南

本文详细介绍了如何利用AutoDL平台和vLLM框架快速部署DeepSeek-R1大模型的实战指南。从服务器配置、vLLM安装优化到模型部署的两种方案,再到性能调优和生产环境建议,手把手教你高效完成大模型部署。特别针对国内开发者遇到的网络问题提供了稳定解决方案,并分享了显存优化、磁盘清理等实用技巧。

weixin_42531779的博客 327

▩Dart-可迭代集合

目录一、什么是集合(collections)?二、什么是迭代器(Iterable)?三、读取元素示例1:使用for-in循环示例2:使用first和last示例3:使用firstWhere()示例4:练习编写测试谓词四、检测条件示例1:使用any()和every()示例2:验证Iterable满足条件五、过滤示例1:使用where()示例2:使用takeWhile示例3:过滤list中的元素六、映射(Mapping)示例1:使用map修改元素示例2:映射(Mapping)到不同的类型七、示例——将全部内容归

itzyjr的专栏 1090

虚拟机Ubuntu连接USRP

笔记本通过网线连接USRP。

xiaozir的博客 2305

【python】epub的电子书繁体字与简体字转换

中文繁体与简体转换

xiexianyou666的博客 3088

dart学习笔记(一)

可迭代的集合 一些基础知识 与java类似,dart也支持List(有序可重复),set(无序不可重复)和map(双列集合). Iterable类是集合的父类,List和set都是Iterable.例如如下代码片段: Iterable<int> iterable = [1, 2, 3];//[1, 2, 3]表示一个List dart中List支持下标式引用,而Iterable不支持,如下: var list = [1, 2, 3]; int a = list[0];//正确 Ite

u013190297的博客 347

FREERTOS+LWIP+IAP实现TCP、HTTP、网页访问并固件升级、更新配置 (三)lwip实现httpd服务并在web访问

在前两篇文章中配置freeRTOS和,并实现了TCP、UDP的通信协议,现在终于轮到重头戏lwip的httpd服务,LWIP官方例程中是有很多自带的网页的,但是远远不够满足实际项目的使用需求,因此我也是踩了很多坑,从前端网页制作,到网络通信的实现,到后端数据处理,从头开始学起,也是学习到了很多没接触过的东西,本章将搭建LWIP的HTTP服务使得浏览器可以访问WEB。

wangjiaheng0716的博客 2963

▩Dart-Iterable<E>类

目录一、概述二、子类三、可用的扩展四、构造函数五、成员属性六、方法七、运算符八、静态方法 本文是自己翻译的,来源:Iterable<E> class Iterable<E> class (Null safety) 可以按顺序访问的值或“元素”的集合。 一、概述 通过使用iterator getter获取Iterator,并使用它逐步遍历值,达到访问iterable的元素的目的。使用迭代器单步执行是通过调用iterator.moveNext,如果调用返回true,则迭代器现在已移动到下

itzyjr的专栏 2248

2024年数字IC秋招-华为机试-数字芯片-实习笔试题

笔试题目:40个选择题A.综合时不同文件列表内的宏定义仅在本列表生效B.宏定义会覆盖,不需要单独undefC.仿真时出现宏定义冲突以最后一次值为准D.宏定义最好在各文件中随用随定义A.4/9B.4/6C.01D.0/6。

qq_42135020的博客 2891

redhawk:avgTW maxTW minTW minWC的区别

分析dynamic ir drop报告时会遇到这几个值,avgTW maxTW minTW minWC,如下图。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 691

iterable转换为list_Dart核心基础List概述

List 可描述为数组或者是集合,用来保存一组数据,与 Java中的 Set、List 、Array,OC中的 NSArray、NSMutableArray 类似,本文章 将从 增、删、改、查的角度来综合分析List的使用。1 Dart 中的 List 的创建在这里将 List 的类型分为两类,一类是可变大小的 List,一类是固定长度的List,如下代码清单 1-1 所示:///代码清...

weixin_31282705的博客 1025

全志A133的AndroidSDK

本小节来学习如何下载全志安卓SDK,SDK的目录,编译和烧录提示:以下是本篇文章正文内容,下面案例可供参考以上就是整个SDK的目录和编译烧录,目的在于让初学者快速了解整个源码的目录和编译出镜像喜欢就订阅吧。

qq_24093081的博客 4054

dart语言Iterable fold用法

下面代码表示累计求和。 main(){ Iterable<int> iterable = {1,3,5,7};//定义一个迭代器 int result= iterable.fold(0, (curr, next) => curr+next);//对当前和下一个求和,结果给result print(result);//输出 }

Leove的专栏 1166

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Dart | 你知道 sync*/async* 是怎么用的吗?

平时我们在写业务逻辑的时候,肯定都会与网络打交道,那肯定也就避免不了异步请求,代码类似如下:int getData() async { Response r = a...

Flutter笔记 6943

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Dart SDK核心库速查:dart:core、collection、async、typed_data四大必备库完全讲解

Dart SDK 内置了四套开箱即用的核心库:**dart:core**(内置类型)、**dart:collection**(高级集合)、**dart:async**(异步编程)和 **dart:typed_data**(高性能二进制数据)。对于刚接触 Dart 的新手来说,搞懂这四个库"各管什么、何时使用",是写出地道 Dart 代码的第一步。本文作为一份完整的速查指南,带你逐一拆解四大核心库的

gitblog_00012的博客 557

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Dart语言基础语法与Flutter开发入门指南

Dart是一种面向对象的编程语言,由Google开发,特别适用于构建跨平台应用。作为Flutter框架的官方语言,Dart结合了强类型系统的安全性和现代语言的灵活性。其核心特性包括空安全、异步编程支持和丰富的标准库,能够有效提升开发效率。在移动开发领域,Dart通过Flutter框架实现了高性能的跨平台应用开发,尤其适合需要快速迭代的项目。本文重点解析Dart的基础语法结构,包括变量声明、控制流程和函数定义等核心概念,帮助Java/JavaScript开发者快速掌握这门语言。

weixin_34008933的博客 512

[Flutter] 使用Dart Extension,帮你扩充常用类的功能

[Flutter] 使用Dart Extension,帮你扩充常用类的功能 Flutter 是基于Dart这个语言的。在Dart 2.7 版本中,新加入了一个重要的语法功能,叫做extension。Extension的主要功能给已经存在的类添加新的member function,往里面增加新的函数。通过extension, 我们可以向诸如 Iterable , String 这样的常用类里面增加一...

weixin_39649693的博客 1万+

Dart List实战指南:从增删改查到Flutter状态管理踩坑总结

在Dart与Flutter开发中,List作为动态数组是最常用的集合类型,其底层动态扩容与浅拷贝机制直接影响业务性能与数据安全。掌握add、removeWhere、sort等高频操作,理解索引遍历、迭代器修改及惰性Iterable的原理,才能在列表页、消息流、筛选分组等真实场景中写出稳健代码。本文以工程实践视角,系统梳理Dart List的创建方式、增删改查、遍历查询、排序去重,并深入讲解Flutter状态管理中“创建新列表”的更新策略与ListView.builder的高效配合,帮助开发者避开常见坑点,提

weixin_33851429的博客 435

Flutter | Dart Iterable toList 方法的 growable 参数

不支持的操作:不能从一个固定长度的 list 中移除。参数表示 list 的长度是否可变,

无夜之星辰的博客 674

Dart2基础(二) - List、Set和Map

目录 List Set Map 通用方法 Dart2提供了3种核心的集合类型 List(列表)、Set(集合)和Map(映射)。 下面是三种集合类型的使用方法: List List的声明,可以用var也可用List。 // 非固定长度 var testList = List(); // 也可以 List testList = List(); print(testList....

山海的博客 2万+

dart系列之:在dart中使用生成器

文章目录简介两种返回类型的generatorStream的操作总结 简介 ES6中在引入异步编程的同时,也引入了Generators,通过yield关键词来生成对应的数据。同样的dart也有yield关键词和生成器的概念。 什么时候生成器呢?所谓生成器就是一个能够持续产生某些数据的装置,也叫做generator。 两种返回类型的generator 根据是同步生成还是异步生成,dart返回的结果也是不同的。 如果是同步返回,那么返回的是一个Iterable对象. 如果是异步返回,那么返回的是一个Stream对

程序那些事 3059

Dart 语法原来这么好玩儿

说到到某个语言的语法可能大家会觉得很枯燥、乏味,而日常开发中我们往往更加注重的是业务逻辑和页面开发,语法的使用大多也停留在满足基本的需求。其实Dart语法有很多有意思的地方的,仔细探究一下你会发现,它的简洁清晰、灵活多样的语法会让人爱不释手。在本文中,我们将探索 Dart 语法的各种奇妙之处吧。

mzxj7255的博客 1105

【Dart】Dart学习(十一)其他

Dart学习(十一)其他

每天不是在写bug就是在写bug的路上 474
上一篇: Dart入门——扩展方法和Mixin
下一篇: BottomSheetDialog
得食猫
博客等级 码龄11年 50粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

得食猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值