掌握 Dart: 列表操作的内置函数详解

这里写目录标题

  • 深入学习Dart中的List集合
    • List的创建与初始化
    • List的基本操作
      • 添加元素
      • 删除元素
      • 查询和访问元素
      • 修改元素
    • 迭代与映射
    • List的高级特性
      • List的排序
      • 切片和范围
      • 不可变List
      • 1. `add()`
      • 2. `addAll()`
      • 3. `insert()`
      • 4. `insertAll()`
      • 5. `remove()`
      • 6. `removeAt()`
      • 7. `removeLast()`
      • 8. `forEach()`
      • 9. `map()`
      • 10. `filter()` (注意:Dart中用`where`代替)
      • 11. `sort()`
      • 12. `sublist()`
    • 结语

深入学习Dart中的List集合

Dart是一种现代化的,面向对象的编程语言,它的设计不仅注重于前端开发(特别是Flutter框架),还适用于服务器端和命令行工具的开发。在Dart中,集合类型扮演着至关重要的角色,其中List是最常用和最基础的集合类型之一。本文将深入探讨Dart中的List集合,包括其基本用法、常见操作及一些高级特性。

List的创建与初始化

在Dart中,List是一个有序的元素集合,可以包含重复的元素。创建和初始化List的方法有很多种:

// 创建一个空的list
var emptyList = [];

// 利用字面量创建一个含有特定元素的list
var fruits = ['apple', 'banana', 'mango'];

// 使用List的构造函数
var filledList = List.filled(3, 'element');

// 生成一个数字范围的list
var numberList = List.generate(5, (i) => i + 1);

List的基本操作

List类型提供了一系列操作方法,使我们可以轻松地对集合进行增、删、查、改等操作。

添加元素

fruits.add('orange'); // 在末尾添加单个元素
fruits.addAll(['grape', 'watermelon']); // 在末尾一次性添加多个元素
fruits.insert(1, 'strawberry'); // 在指定位置插入单个元素

删除元素

fruits.remove('banana'); // 删除指定元素
fruits.removeAt(2); // 删除指定位置的元素
fruits.removeLast(); // 删除最后一个元素
fruits.clear(); // 清空整个列表

查询和访问元素

var firstFruit = fruits.first; // 获取第一个元素
var lastFruit = fruits.last; // 获取最后一个元素
var fruit = fruits[2]; // 通过索引访问元素
var containsMango = fruits.contains('mango'); // 判断是否包含某个元素

修改元素

fruits[0] = 'peach'; // 修改指定位置的元素
fruits.replaceRange(0, 2, ['cherry', 'blueberry']); // 替换一系列元素

迭代与映射

List的一个常见用途是迭代它的所有元素,进行一些操作:

for (var fruit in fruits) {
print(fruit);
}

fruits.forEach((fruit) => print(fruit));

// 使用map方法转换列表中的每个元素
var upperCasedFruits = fruits.map((fruit) => fruit.toUpperCase()).toList();

List的高级特性

List的排序

fruits.sort(); // 按照自然顺序对列表进行排序

切片和范围

var subList = fruits.sublist(1, 3); // 获取列表的一部分

不可变List

如果希望创建一个一旦初始化就不能改变的List,可以使用const关键字:

var immutableList = const ['apple', 'banana'];

Dart的List提供了丰富的内置函数来支持各种列表操作,从简单的元素添加到复杂的数据处理都有涉及。这些函数极大地提升了编码的效率与便捷性。下面是一些常用的内置函数的详细介绍:

1. add()

用于向列表的末尾添加单个元素。

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

2. addAll()

用于将一个集合中的所有元素添加到列表的末尾。

var moreNumbers = [5, 6];
numbers.addAll(moreNumbers); // [1, 2, 3, 4, 5, 6]

3. insert()

在列表中指定的位置插入一个元素。

numbers.insert(0, 0); // [0, 1, 2, 3, 4, 5, 6]

4. insertAll()

在列表中指定的位置插入一个集合中的所有元素。

numbers.insertAll(1, [-1, -2]); // [0, -1, -2, 1, 2, 3, 4, 5, 6]

5. remove()

从列表中删除第一次出现的指定元素。

numbers.remove(-1); // Removes -1 from the list.

6. removeAt()

根据索引位置删除元素,并返回被删除的元素。

var removedElement = numbers.removeAt(1); // Removes -2 from the list and returns it.

7. removeLast()

删除列表中最后一个元素,并返回它。

var lastElement = numbers.removeLast(); // Removes 6 from the list and returns it.

8. forEach()

对列表中的每个元素执行提供的函数。

numbers.forEach((number) => print(number)); // Prints every element in the list.

9. map()

对列表中的每个元素应用提供的函数,并返回一个新的集合。通常用于转换元素。

var squaredNumbers = numbers.map((number) => number * number).toList(); // Squares every element.

10. filter() (注意:Dart中用where代替)

筛选列表中符合条件的元素并返回一个新的Iterable集合。

var evenNumbers = numbers.where((number) => number % 2 == 0).toList(); // Selects even numbers.

11. sort()

对列表中的元素进行排序。可以提供一个可选的比较函数来自定义排序规则。

numbers.sort((a, b) => a.compareTo(b)); // Sorts numbers in ascending order.

12. sublist()

返回列表的一部分,从开始索引到(但不包含)结束索引。

var middleNumbers = numbers.sublist(2, 5); // [1, 2, 3] considering the previous examples

这些内置函数为开发者提供了高效和简便的方法来操作列表,是掌握Dart编程语言时的关键部分。

结语

List在Dart中是一个极其灵活和强大的数据结构,无论是对于初学者还是有经验的开发者,都是必须掌握的基础。通过本文的学习,希望您能对Dart中的List有更深入的理解和应用。

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

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

相关文章

【Yapi】Idea配置easy-yapi

Idea配置easy-yapi 第一步:安装EasyApi 下载好EasyYapi的Plugins,在Settings—Plugins—Install Plugin from Disk…导入并安装,勾选为enabled。第二步:配置EasyApi 打开Settings—EasyApi,server设置为你的yapi地址&…

现代化个人博客系统 ModStartBlog v9.3.0 支持Laravel 9

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场,后台一键快速安装 …

新兴存内计算芯片架构、大型语言模型、多位存内计算架构——存内计算架构的性能仿真与对比分析探讨

一.大型语言模型(LLM) 近年来,基于注意力机制的大型语言模型(LLM)已经取得了令人瞩目的成功。这些模型的尺寸在不断增长,每两年增长240倍,而相应的计算需求则增长了近750倍。然而,硬…

本地搭建属于你自己的AI搜索引擎 支持多家AI模型

FreeAskInternet 是一个完全免费、私有且本地运行的搜索聚合器,并使用 MULTI LLM 生成答案,无需 GPU。用户可以提出问题,系统将进行多引擎搜索,并将搜索结果合并到LLM中,并根据搜索结果生成答案。全部免费使用。 项目…

实验六 智能手机互联网程序设计(微信程序方向)实验报告

实验目的和要求 请完成创建图片库应用&#xff0c;显示一系列预设的图片。 提供按钮来切换显示不同类别的图片。 二、实验步骤与结果&#xff08;给出对应的代码或运行结果截图&#xff09; 1.WXML <view> <button bindtap"showAll">所有图片</but…

从零开始学习大模型

随着人工智能技术的快速发展&#xff0c;大模型已成为许多领域的热门话题。然而&#xff0c;大模型的创建并不是一件容易的事情。在本文中&#xff0c;我们将从零开始学习如何创建一个大模型&#xff0c;帮助读者掌握大模型的创建过程。 一、数据收集 创建大模型的首要任务是…

2024年在Vim中开发vue2+java

neovim 0.5刚出来的时代&#xff0c;那时刚有lua插件我很狂热。每天沉迷于打造自己的IDE之中。写过一堆相关的博客&#xff0c;也录过一些视频教程。后来发现neovim的接口和插件更新的很快&#xff0c;导致配置文件要不定期的修改&#xff0c;才能保证新版本的插件的适配。我也…

计算机网络 Cisco远程Telnet访问交换机和Console终端连接交换机

一、实验要求和内容 1、配置交换机进入特权模式密文密码为“abcd两位班内学号”&#xff0c;远程登陆密码为“123456” 2、验证PC0通过远程登陆到交换机上&#xff0c;看是否可以进去特权模式 二、实验步骤 1、将一台还没配置的新交换机&#xff0c;利用console线连接设备的…

ArcGIS加载的各类地图怎么去除服务署名水印

昨天介绍的&#xff1a; 一套图源搞定&#xff01;清新规划底图、影像图、境界、海洋、地形阴影图、导航图-CSDN博客文章浏览阅读373次&#xff0c;点赞7次&#xff0c;收藏11次。一体化集成在一起的各类型图源&#xff0c;比如包括影像、清新的出图底图、地形、地图阴影、道路…

苍穹外卖学习记录(一)

1.JWT令牌认证 JSON Web Token (JWT)是一个开放标准(RFC 7519)&#xff0c;它定义了一种紧凑的、自包含的方式&#xff0c;用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任&#xff0c;因为它是数字签名的。 JWT是目前最常用的一种令牌规范&#xff0c;它最…

【学习笔记】Python大数据处理与分析——pandas数据分析

一、pandas中的对象 1、Series对象 由两个相互关联的数组(values, index)组成&#xff0c;前者&#xff08;又称主数组&#xff09;存储数据&#xff0c;后者存储values内每个元素对应关联的标签。 import numpy as np import pandas as pds1 pd.Series([1, 3, 5, 7])print(…

Linux LVM与磁盘配额

目录 一.LVM概述 LVM LVM机制的基本概念 PV&#xff08;Physical Volume&#xff0c;物理卷&#xff09; VG&#xff08;Volume Group&#xff0c;卷组&#xff09; LV&#xff08;Logical Volume&#xff0c;逻辑卷&#xff09; 二.LVM 的管理命令 三.创建并使用LVM …

AutoPSA中推荐用户使用仿CII计算

Q:请问未知错误。优易AUtoPSAInDon3.app1670行是什么原因呢&#xff1f;如下图&#xff1a; A: 这是老的仿GLIF算法&#xff0c;遇到特殊情况有这个提示&#xff0c;建议使用仿CAESARII算法。

车载摄像头视频防抖处理解决方案,全新的稳定视觉体验

面对复杂多变的道路环境和车辆运动状态&#xff0c;如何确保车载摄像头拍摄的视频稳定清晰&#xff0c;一直是行业面临的重要挑战。美摄科技&#xff0c;作为视频防抖技术的领军企业&#xff0c;以其领先的车载摄像头视频防抖处理解决方案&#xff0c;为企业提供了全新的稳定视…

C++ - 文件流fstream

C 文件流是指在C编程中使用的用于文件输入输出操作的机制。这种机制允许程序员以类似于流的方式读取和写入文件数据。在C中&#xff0c;文件流通常使用<fstream>头文件提供的类来实现。 常用的文件流类包括&#xff1a; 1. std::ofstream&#xff1a;用于向文件中写入数…

筑牢个人信息安全防线,海云安受邀参加武汉“名家论坛”国家安全教育日专题讲座

近日&#xff0c;武汉“名家论坛”国家安全教育日专题讲座活动《“刷脸”有风险&#xff0c;如何保护我们的个人信息安全&#xff1f;》在武汉图书馆报告厅举办&#xff0c;海云安副总工程师李博士受邀参加本次活动。 活动以线下讲座、线上直播的形式&#xff0c;结合“普法讲座…

rk3588 安卓调试

rknn装上了android系统&#xff0c;用type-c usb连接上电脑&#xff0c;设备管理器发现了rk3588&#xff0c;但是Android Studio没有发现设备 后来怀疑是驱动没有安装&#xff0c;我用的驱动下载地址&#xff1a; 瑞芯微Rockchip驱动安装助手(适用于RK3308 RK3399等) Mcuzone…

H2O-3机器学习平台源码编译的各种坑

H2O-3机器学习平台是一个非常适合非专业人士学习机器学习的平台&#xff0c;自带WebUI&#xff0c;效果还是蛮不错的&#xff0c;官方也提供了jar包&#xff0c;一条命令就能直接运行&#xff0c;非常方便&#xff0c;但最近有源码编译的需求&#xff0c;实际操作过程中&#x…

error: failed to push some refs to ‘https://gitee.com/zhao-zhimin12/gk.git‘

git push origin master发现以下报错: 解决办法: 一、强制推送 git push origin master -f &#xff08;加上 -f 就是强制&#xff09; 二、 先拉取最新代码&#xff0c;再推送 1.git pull origin master 2.git push origin master

OpenHarmony实战开发-如何使用ArkUIstack 组件实现多层级轮播图。

介绍 本示例介绍使用ArkUIstack 组件实现多层级轮播图。该场景多用于购物、资讯类应用。 效果图预览 使用说明 1.加载完成后显示轮播图可以左右滑动。 实现思路 1.通过stack和offsetx实现多层级堆叠。 Stack() {LazyForEach(this.swiperDataSource, (item: SwiperData, i…