dart 语言中的列表(List)
dart 语言中的列表(List)
作者: 李俊才
邮箱 :291148484@163.com
CSDN 主页:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343
本文地址:https://blog.csdn.net/qq_28550263/article/details/123322685
相关文章推荐:
- dart 语言中的 Set集合:https://blog.csdn.net/qq_28550263/article/details/123449765
目 录
1. 概述
2. 定长列表(Fixed-length list)
3. 可增长列表(Growable list)
4. 不可变列表(unmodifiable list)
5. 其它创建列表的方式
- 5.1 使用
List<E>.empty
构造空列表 - 5.2 使用
List<E>.from
构造列表 - 5.3 使用
List<E>.generate
构造列表 - 5.4 使用
List<E>.of
构造列表
6. 常用属性
7. 常用方法
8. 列表的遍历
- 8.1 使用 for 语句遍历列表
- 8.2 使用 for…in 语句遍历列表
- 8.3 使用 List.forEach 方法遍历列表
1. 概述
List是一种序列,即元素的有序集合。List中的数据可以重复,索引从0开始递增,且索引和值之间是一一对应的关系,这和其它语言类似。
在Dart语言中,列表(List)分为 定长列表 、 可增长列表和不可变列表。前者长度是固定的,也就是说一旦定义当你尝试使用可以更改列表长度的操作时,将发生错误。最后一个所谓不可变列表指的该列表一经创建不再能够改变。
2. 定长列表(Fixed-length list)
定长列表是长度固定的列表,若尝试更改其长度则会发生错误。列表的构造函数提供了filled
方法,用于创建一个给定长度的列表。
定长列表由List.filled
方法创建:
List<E>.filled(int length,E fill,{bool growable = false}
)
例如:
final fixedLengthList = List<int>.filled(5, 0); // Creates fixed-length list.
print(fixedLengthList); // [0, 0, 0, 0, 0]
fixedLengthList[0] = 87;
fixedLengthList.setAll(1, [1, 2, 3]);
print(fixedLengthList); // [87, 1, 2, 3, 0]
// Fixed length list length can't be changed or increased
fixedLengthList.length = 0; // Throws
fixedLengthList.add(499); // Throws
3. 可增长列表(Growable list)
创建的默认可增长列表[]保留一个内部缓冲区,并在必要时增长该缓冲区。这保证了一系列加法操作都将在摊销的常数时间内执行。直接设置长度可能会花费与新长度成正比的时间,并且可能会改变内部容量,因此随后的添加操作将需要立即增加缓冲区容量。
例如:
final growableList = <String>['A', 'B']; // Creates growable list.
4. 不可变列表(unmodifiable list)
使用List.unmodifiable
方法可以创建不可变列表。不可变列表的列表不能改变其长度或元素。如果元素本身是不可变的,那么结果列表也是不可变的。
List<E>.unmodifiable(Iterable elements
)
例如:
final numbers = <int>[1, 2, 3];
final unmodifiableList = List.unmodifiable(numbers); // [1, 2, 3]
unmodifiableList[1] = 87; // Throws.
5. 其它创建列表的方式
5.1 使用List<E>.empty
构造空列表
例如:
final growableList = List.empty(growable: true); // []
growableList.add(1); // [1]final fixedLengthList = List.empty(growable: false);
fixedLengthList.add(1); // error
5.2 使用List<E>.from
构造列表
格式为:
List<E>.from(Iterable elements, // 从一个可迭代对象创建{bool growable = true} // 是否可创建为增长列表
)
例如:
final numbers = <num>[1, 2, 3];
final listFrom = List<int>.from(numbers);
print(listFrom); // [1, 2, 3]
5.3 使用List<E>.generate
构造列表
格式为:
List<E>.generate(int length,E generator(int index),{bool growable = true}
)
该方法创建一个具有长度位置的列表,并用调用生成器为范围0内的每个索引创建的值填充该列表…长度- 1,按升序排列。
例如:
final growableList =List<int>.generate(3, (int index) => index * index, growable: true);
print(growableList); // [0, 1, 4]final fixedLengthList =List<int>.generate(3, (int index) => index * index, growable: false);
print(fixedLengthList); // [0, 1, 4]
5.4 使用List<E>.of
构造列表
格式为:
List<E>.of(Iterable<E> elements, // 从一个可迭代对象创建{bool growable = true} // 是否可创建为增长列表
)
例如:
final numbers = <int>[1, 2, 3];
final listOf = List<num>.of(numbers);
print(listOf); // [1, 2, 3]
6. 常用属性
属性 | 描述 |
---|---|
length
|
获取列表的长度 |
isEmpty
|
判断列表是否为空 |
isNotEmpty
|
判断列表是否非空 |
reversed
|
列表数据反序后的可迭代对象(Iterable<E> ),不改变原列表序列
|
first
|
返回列表的第一个元素 |
last
|
返回列表的最后一个元素 |
例子:
void main() {List a = [];List b = [1, 2, 3, 4, 5];print('列表 a 的长度为 ${a.length}');print('列表 b 的长度为 ${b.length}');print('列表 a 是否为空: ${a.isEmpty}');print('列表 b 是否非空: ${b.isNotEmpty}');print('列表 b 反序: ${b.reversed}');print('列表 b : ${b}');
}
其运行结果为:
列表 a 的长度为 0
列表 b 的长度为 5
列表 a 是否为空: true
列表 b 是否非空: true
列表 b 反序: (5, 4, 3, 2, 1)
列表 b : [1, 2, 3, 4, 5]
7. 常用方法
方法 | 描述 |
---|---|
add
|
增加一个元素 |
clear
|
从列表中删除所有对象;列表的长度变为零。 |
addAll
|
拼接列表 |
indexOf
|
返回元素的索引,没有则返回-1 |
lastIndexOf
|
列表中元素的最后一个索引。 |
indexWhere
|
返回列表中满足所提供测试的第一个索引。 |
lastIndexWhere
|
返回列表中满足所提供测试的最后一个索引。 |
remove
|
根据传入的值删除元素 |
removeAt
|
根据传入的索引删除元素 |
insert (index, value)
|
在索引的位置插入元素 |
insertAll (index, list)
|
在索引的位置插入一个列表中所有的元素 |
removeRange (int start, int end)
|
从列表中移除一定范围的元素 |
toList
|
将其它可迭代对象转换为列表 |
join ()
|
将List元素按指定元素拼接 |
map
|
将List中的每个元素依次和map(f)中传入的函数条件f进行比较,如果满足条件则返回true,否则返回false |
fillRange (int start, int end, [E? fillValue])
|
用 fillValue 覆盖一段元素。 |
getRange (int start, int end, [E? fillValue])
|
创建迭代一定范围元素的可迭代对象。 |
shuffle ([Random? random])
|
洗牌函数,也就是随机打乱列表中的元素。 |
sort ([int compare(E a, E b)?])
|
就地排序,根据compare函数指定的顺序对列表进行排序。 |
getRange (int start, int end])
|
创建迭代一定范围元素的Iterable |
sublist (int start, [int? end])
|
索引,返回包含开始和结束之间的元素的新列表。 |
【例】:
void main() {List a = [0, 1, 2, 3, 4, 5];a.add(6); // 尾部插入一个元素 6print(a);print('a.indexOf(3) = ${a.indexOf(3)}');print('a.indexOf(9) = ${a.indexOf(9)}');a.remove(0); // 移除索引为 0 处的元素print(a);a.insert(5, 6); // 在索引为 5 元素后插入元素6print(a);// 在索引为 7 元素后插入一个列表中的所有元素a.insertAll(7, [1, 2, 3, 4, 5]);print(a);
}
输出为:
[0, 1, 2, 3, 4, 5, 6]
a.indexOf(3) = 3
a.indexOf(9) = -1
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 6]
[1, 2, 3, 4, 5, 6, 6, 1, 2, 3, 4, 5]
【例】:fillRange
final words = List.filled(5, 'old');
print(words); // [old, old, old, old, old]
words.fillRange(1, 3, 'new');
print(words); // [old, new, new, old, old]
【例】:fillRange
final words = List.filled(5, 'old');
print(words); // [old, old, old, old, old]
words.fillRange(1, 3, 'new');
print(words); // [old, new, new, old, old]
【例】:sort
final a = <String>['two', 'three', 'four'];
// Sort from shortest to longest.
a.sort((a, b) => a.length.compareTo(b.length));
print(a); // [two, four, three]final b = <int>[13, 2, -11, 0];
b.sort();
print(b); // [-11, 0, 2, 13]
【例】:getRange与sublist
// getRange
final colors = <String>['red', 'green', 'blue', 'orange', 'pink'];
final firstRange = colors.getRange(0, 3);
print(firstRange.join(', ')); // red, green, bluefinal secondRange = colors.getRange(2, 5);
print(secondRange.join(', ')); // blue, orange, pink// sublist
final colors = <String>['red', 'green', 'blue', 'orange', 'pink'];
print(colors.sublist(1, 3)); // [green, blue]final colors = <String>['red', 'green', 'blue', 'orange', 'pink'];
print(colors.sublist(3)); // [orange, pink]
【例】:map
var products = jsonDecode('''
[{"name": "Screwdriver", "price": 42.00},{"name": "Wingnut", "price": 0.50}
]
''');
var values = products.map((product) => product['price'] as double);
var totalPrice = values.fold(0.0, (a, b) => a + b); // 42.5.
8. 列表的遍历
8.1 使用 for 语句遍历列表
void main() {List a = [1, 2, 3, 4, 5];for (var i = 0; i < a.length; i++) {print(a[i]);}
}
8.2 使用 for…in 语句遍历列表
void main() {List a = [1, 2, 3, 4, 5];// for in 语句for (var i in a) {print(i);}
}
8.3 使用 List.forEach 方法遍历列表
void main() {List a = [1, 2, 3, 4, 5];// List 的 forEach 方法a.forEach((elem) {print(elem);});
}
或者也可以写成 箭头函数的形式 :
void main() {List a = [1, 2, 3, 4, 5];a.forEach((elem) => {print(elem)});
}
其中箭头函数
是一种简写模式,与JavaScript/TypeScript中的箭头函数不同的是,dart语言中的箭头函数目不支持果条语句。也就是说,如果你想写多条语句,则不可以使用 箭头函数的写法。由于只有一条语句,往往这对代表代码块的花括号{}
也是可以省去的。
dart 语言中的列表(List)相关推荐
- dart系列之:dart语言中的特殊操作符
dart系列之:dart语言中的特殊操作符 文章目录 简介 普通操作符 类型测试操作符 条件运算符 级联符号 类中的自定义操作符 总结 简介 有运算就有操作符,dart中除了普通的算术运算的操作符之外 ...
- dart语言中的常量与变量
dart 语言中的 常量 与 变量 李俊才 的 CSDN 博客 CSDN 主页:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 邮箱 ...
- dart系列之:dart语言中的内置类型
文章目录 简介 Null 数字 字符串 布尔值 列表 set和map 简介 和所有的编程语言一样,dart有他内置的语言类型,这些内置类型都继承自Object,当然这些内置类型是dart语言的基础,只 ...
- dart系列之:dart语言中的变量
文章目录 简介 dart中的变量 定义变量 变量的默认值 Late变量 常量 总结 简介 flutter是google在2015年dart开发者峰会上推出的一种开源的移动UI构建框架,使用flutte ...
- dart系列之:dart语言中的异常
文章目录 简介 Exception和Error Throw和catch Finally 总结 简介 Exception是程序中的异常情况,在JAVA中exception有checked Excepti ...
- dart系列之:dart语言中的函数
文章目录 简介 函数的参数 main函数 匿名函数 闭包 函数的返回值 总结 简介 函数是所有编程语言都有的内容,不管是面向对象还是面向过程,函数都是非常重要的一部分.dart中的函数和java中的函 ...
- html语言中项目列表的嵌套,做HTML嵌套列表的正确方法?
选项2是正确的:嵌套的 是 它属于我.如果你验证,选项1在html 5中出现错误-信用:用户3272456 正确: 作为.的孩子 生成HTML嵌套列表的正确方法是使用嵌套的 作为一个孩子 它属于它的. ...
- 去掉字符串中的单引号和双引号_同时搞定Android和iOS的Dart语言(4):字符串类型...
在Dart语言中,用String表示字符串类型,可以用单引号或双引号表示字符串的值,例如,下面声明String类型变量的代码都是正确的. String s1 = 'hello world';Strin ...
- Dart语言——45分钟快速入门(下)
类和对象 类的定义 // Dart中定义一个类 class Person {String name;int age;Person(String name, int age) {this.name = ...
最新文章
- linux 股票指南针,linux 基础命令 1
- 纯css写单选框和复选框的样式和功能
- 从青铜到王者的路线,java枚举类使用场景
- Web安全开发注意事项
- iphone字体大小设置_Win10电脑桌面上使用的记事本便签软件字体大小怎么调整?...
- Kafka——性能逆天的存在
- java 面试题 生产者 消费者_面试大厂必看!就凭借这份Java多线程和并发面试题,我拿到了字节和美团的offer!...
- Kotlin:比 Java 做得更好
- file图片上传之前先预览
- mac 下安装iwork+ps+nx2
- 如何在桌面添加计算机日历工具,Win7电脑在桌面添加时钟、日历、货币、天气、CPU仪表盘小工具方法...
- ROS安装教程(详细)
- steam 经典 android,游戏玩家必备 Android版Steam试用
- python中pandas库的作用_Python数据分析之Pandas库(笔记)
- 雪球网股票用户评论爬虫
- 外卖返利系统电影吃喝玩乐团购返利系统外卖探探外卖券儿外卖cps系统saas源码
- android 监听耳机插拔
- Python的打包神器—Nuitka
- android studio 与eclipse创建命名空间时候的区别
- 朊病毒简记|症状与机理