淘先锋技术网

首页 1 2 3 4 5 6 7

  目录

编程中非常常用的集合是List。Dart以 List 对象的形式表示List。一个列表仅仅是对象的有序组。dart:core 库提供的列表类,使创建和列表的操作。

Dart中列表的逻辑表示如下:
在这里插入图片描述

  • test_list - 是引用集合的标识符。
  • 该列表包含值12,13和14保存这些值的存储块称为元素。
  • List中的每个元素都由一个称为索引的唯一编号标识。索引从零开始 并向上扩展到n-1,其中 n是List中元素的总数。该索引也称为下标 。

列表可分为

  • 固定长度列表
  • 可增长的列表

 

固定长度List

固定长度列表的长度在运行时不能更改。创建固定长度列表的语法如下所示:

  • 声明列表
    声明固定长度列表的语法如下:

var list_name = new List(initial_size);

上面的语法创建了指定大小的列表。列表不能在运行时增长或缩小。任何调整列表大小的尝试都将导致异常
 

  • 初始化列表

初始化列表的语法如下所示:

lst_name[index] = value;

 var lst = new List(3);
 lst[0] = 12;
 lst[1] = 13;
 lst[2] = 11;
 print(lst);

输出

[12, 13, 11]

 

可增长的List

可增长列表的长度可以在运行时更改。声明和初始化可增长列表的语法如下所示:

  • 声明列表

var list_name = [val1, val2, val3];
--创建一个列表,包含指定值
 
或者
 
var list_name = new List();
--创建一个空列表

  • 初始化列表
    index / subscript用于引用应该用值填充的元素。初始化列表的语法如下所示:

以下示例显示如何创建3个元素的列表。

  var numList = [1,2,3];
  print(numList);

输出

[1, 2, 3]

 

以下示例使用 空 List() 构造函数创建零长度列表。 List 类中的 add() 函数用于动态地向列表中添加元素。

  var lst = new List();
  lst.add(12);
  lst.add(13);
  print(lst);

它将产生以下输出

[12, 13]

 

filled()方法创建List

 
创建一个 list,每个元素共享相同的值,growable 表示是 list 长度是否可变,默认 false 固定长度

语法

参数

  • length - List长度
  • fill - 创建List的元素
  • growable - List长度是否可变,默认为 false不可变。可以设置为 true,使List长度可变

例1

  var listFilled = new List.filled(3, 0,growable: true);
  print(listFilled);
  listFilled.add(1);
  print(listFilled);

输出

[0, 0, 0]
[0, 0, 0, 1]

例2

  var listFilledFalse = new List.filled(3, "t1");
  print(listFilledFalse);

输出

注意:
 
listFilledFalse 是长度不可变的List,向listFilledFalse中添加数据会导致报错。

listFilledFalse.add("t2");

输出:
[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: Unsupported operation: Cannot add to a fixed-length list
#0      FixedLengthListMixin.add (dart:_internal/list.dart:23:5)
#1      extendableLengthList (package:flutter_app_one/List.dart:37:19)
#2      mainList (package:flutter_app_one/List.dart:3:3)
#3      main (package:flutter_app_one/main.dart:27:3)
#4      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:240:25)
#5      _rootRun (dart:async/zone.dart:1126:13)
#6      _CustomZone.run (dart:async/zone.dart:1023:19)
#7      _runZoned (dart:async/zone.dart:1518:10)
#8      runZoned (dart:async/zone.dart:1502:12)
#9      _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:232:5)
#10     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#11     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

 

from()方法创建List

 
使用另一个List创建一个新的List

语法

参数

  • Iterable elements - 使用的List
  • growable - 长度是否可变,默认为 true可变

  var listFrom = new List.from(["a1","a2","a3"]);
  print(listFrom);

输出

 

generate()方法创建List

 
创建一个元素,每个位置创建一个新对象。

语法

参数

  • length - List 长度
  • generator - 表达式
  • growable - List 长度是否可变,默认为true可变

  var listGenerate1 = new List.generate(5, (index) => index);
  print("listGenerate1: ${(listGenerate1)}");

  var listGenerate2 = new List.generate(5, (index) => index + 1);
  print("listGenerate2: ${(listGenerate2)}");

输出

listGenerate1: [0, 1, 2, 3, 4]
listGenerate2: [1, 2, 3, 4, 5]

List属性

 

属性描述
first属性返回列表中的第一个元素
isEmpty属性如果集合没有元素,则返回true
isNotEmpty属性如果集合至少包含一个元素,则返回true
length属性返回列表元素个数
last属性返回列表中的最后一个元素
reversed属性以相反顺序返回包含列表值的可迭代对象
single属性检查列表是否只有一个元素并返回它

此属性返回列表中的第一个元素。

语法

list.first

  var listTest = [1,2,3,4,5];
  print("list first object is ${(listTest.first)}");

输出

list first object is 1

如果集合没有元素,则返回true。

语法

list.isEmpty

  var listTest = [1,2,3,4,5];
  print("list is empty? ${(listTest.isEmpty)}");

输出

false

 

如果集合至少包含一个元素,则返回true。

语法

list.isNotEmpty

  var listTest = [1,2,3,4,5];
  print("list is not empty? ${(listTest.isNotEmpty)}");

输出

list is not empty? true

 

返回列表的元素个数。

语法

list.length

  var listTest = [1,2,3,4,5];
  print("The length of list is ${(listTest.length)}");

输出

The length of list is 5

 

返回列表中的最后一个元素。

语法

list.last

  var listTest = [1,2,3,4,5];
  print("list last object is ${(listTest.last)}");

输出

list last object is 5

 

以相反的顺序返回包含列表值的可迭代对象。

语法

list.reversed

  var listTest = [1,2,3,4,5];
  print("The list values in reverse order: ${listTest.reversed}");

输出

The list values in reverse order: (5, 4, 3, 2, 1)

 

检查列表是否只有一个元素并返回它。

语法

list.single

 var lst = new List();
 lst.add(12);
 print("The list has only one element: ${lst.single}");

它将产生以下 输出

The list has only one element: 12

如果List中包含多个元素,则此属性将引发 异常 。以下示例说明了相同的情况:

 var lst = new List();
 lst.add(12);
 lst.add(10);
 print(lst.single);

如果列表有多个元素,那么相同的代码将抛出以下 异常

Unhandled exception:
Bad state: Too many elements
#0 List.single (dart:core-patch/growable_array.dart:234)
#1 main (file:///D:/Demos/Boolean.dart:6:13)
#2 _startIsolate.<anonymous closure> (dart:isolatepatch/isolate_patch.dart:261)
#3 _RawReceivePortImpl._handleMessage (dart:isolatepatch/isolate_patch.dart:148)

 

List方法

 

1)将元素插入List

方法描述
add() 方法将指定值添加到列表的结尾
并返回修改的列表对象
addAll() 方法将多个指定值添加到列表的结尾
并返回修改的列表对象
insert(index,value) 方法将指定值插入到列表的指定位置
并返回修改的列表对象
insertAll(index, [value list])
方法
将多个指定值插入到列表的指定位置
并返回修改的列表对象
followedBy(Iterable<E> other)
方法
向列表末尾追加其他Iterable对象

将指定值添加到列表的结尾,并返回修改的列表对象。

语法

返回值类型

返回一个List。

  var listAdd = [1,2,3,4,5];
  listAdd.add(6);
  print(listAdd);

输出

[1, 2, 3, 4, 5, 6]

将多个指定值添加到列表的结尾,并返回修改的列表对象。

语法

参数

值列表

返回值类型

返回一个List

  var listAddAll = [1,2,3,4,5];
  listAddAll.addAll([6,7,8]);
  print(listAddAll);

输出

[1, 2, 3, 4, 5, 6, 7, 8]

将指定值插入到列表的指定位置,并返回修改的列表对象。

语法

参数

  • index - 索引下标(注:不可越界)
  • element - 插入List的值

返回值类型

返回一个List

  var listInsert = ["L1","L2","L3","L4","L5"];
  listInsert.insert(1, "L6");
  print(listInsert);

输出

[L1, L6, L2, L3, L4, L5]

 

将多个指定值插入到列表的指定位置,并返回修改的列表对象。

语法

参数

  • index - 索引下标(注意:下标不可越界)
  • iterable - 要插入的List

返回值类型

返回一个List

  var listInsertAll = ["L1","L2","L3","L4","L5"];
  listInsertAll.insertAll(1, ["6","7","8"]);
  print(listInsertAll);

输出

[L1, 6, 7, 8, L2, L3, L4, L5]

 

向列表末尾追加其他列表。

语法

参数

  • Iterable - Iterable对象

返回值类型

Iterable 对象

  var listFollowedBy = [1,2,3];
  Iterable iterableFollowedBy = listFollowedBy.followedBy([4,5,6]);
  print("iterableFollowedBy: ${(iterableFollowedBy)}");

输出

iterableFollowedBy: (1, 2, 3, 4, 5, 6)

 

2)查找列表中的元素

方法描述
indexOf(element)方法获取元素第一次出现的位置
lastIndexOf(element)方法获取元素最后一次出现的位置
indexWhere((element) => expression,index)
方法
获取从index开始满足表达式expression的第一个元素的下标
lastIndexWhere((element) => expression,index)
方法
获取从index开始满足表达式expression的元素最后一次出现的位置
contains(element)方法返回是否包含某个元素
getRange(startIndex, endIndex)方法获取从startIndex至endIndex包含的元素,返回Iterable接口的对象
sublist(startIndex, endIndex)方法获取从startIndex至endIndex包含的元素,返回list对象
elementAt(index)方法获取在 index 下标的元素
every((element) => expression)方法判断每个元素是否满足表达式
如果都满足则返回 true
否则返回 false
firstWhere((element) => expression)
方法
获取满足表达式的第一个元素
lastWhere((element) => expression)
方法
获取满足表达式的最后一个元素
skip(index)方法返回从 index 开始的List
skipWhile((value) => expression)
方法
遍历查找List,跳过满足条件的元素
直到找到不满足条件的元素
从不满足条件的元素下标开始输出直到List结束
take(index)方法返回从 0至index-1的List
takeWhile((value) => expression)
方法
遍历查找List,输出满足条件的元素
直到找到不满足条件的元素
不满足的元素后的元素不输出
cast<Type>()方法判断List中所有元素是否是某个类型
where((element) => expression)
方法
筛选符合条件的 List 元素
whereType<Type>()方法筛选符合类型的 List 元素

 

获取所查找的List元素在List中第一次出现的位置。

语法

参数

  • element - 要查找的元素

返回值类型

  • 元素下标
  • -1(未找到元素时返回)

  var listSearch1 = ["t1",1,2,"t3",4,5,2];
  
  var resIndexOf1 = listSearch1.indexOf("t3");
  var resIndexOf2 = listSearch1.indexOf(3);
  var resIndexOf3 = listSearch1.indexOf(2);
  
  print("resIndexOf1: ${(resIndexOf1)}");
  print("resIndexOf2: ${(resIndexOf2)}");
  print("resIndexOf3: ${(resIndexOf3)}");

输出

resIndexOf1: 3
resIndexOf2: -1
resIndexOf3: 2

 

获取所查找的List元素在List中最后一次出现的位置。

语法

参数

  • element - 要查找的元素

返回值类型

  • 元素下标
  • -1(未找到元素时返回)

  var listSearch1 = ["t1",1,2,"t3",4,5,2];

  var resLastIndexOf = listSearch1.lastIndexOf(2);
  print("resLastIndexOf: ${(resLastIndexOf)}");

输出

resLastIndexOf: 6

 

获取从index开始满足表达式expression的第一个元素的下标。

语法

参数

  • expression - 条件表达式(即筛选条件)
  • index - 开始查找的索引下标

返回值类型

  • 返回满足条件的第一个元素的下标位置。
  • -1(未找到元素时返回)

  var listSearch1 = ["t1",1,2,"t3",4,5,2];
  
  var resIndexWhere1 = listSearch1.indexWhere((element) => element.toString().startsWith("t"));
  var resIndexWhere2 = listSearch1.indexWhere((element) => element.toString().startsWith("t"),1);
  var resIndexWhere3 = listSearch1.indexWhere((element) => element.toString().startsWith("t"),4);
  
  print("resIndexWhere1: ${(resIndexWhere1)}");
  print("resIndexWhere2: ${(resIndexWhere2)}");
  print("resIndexWhere3: ${(resIndexWhere3)}");

输出

resIndexWhere1: 0
resIndexWhere2: 3
resIndexWhere3: -1

 

获取从index开始满足表达式expression的最后一个元素的下标。

语法

参数

  • expression - 条件表达式(即筛选条件)
  • index - 开始查找的索引下标

返回值类型

  • 返回满足条件的最后一个元素的下标位置
  • -1(未找到元素时返回)

  var listSearch1 = ["t1",1,2,"t3",4,5,2];
  
  var resLastIndexWhere1 = listSearch1.lastIndexWhere((element) => element.toString().startsWith("t"));
  var resLastIndexWhere2 = listSearch1.lastIndexWhere((element) => element.toString().startsWith("t"),1);
  var resLastIndexWhere3 = listSearch1.lastIndexWhere((element) => element.toString().startsWith("t"),4);
  
  print("resLastIndexWhere1: ${(resLastIndexWhere1)}");
  print("resLastIndexWhere2: ${(resLastIndexWhere2)}");
  print("resLastIndexWhere3: ${(resLastIndexWhere3)}");

输出

resLastIndexWhere1: 3
resLastIndexWhere2: 0
resLastIndexWhere3: 3

 

判断List是否包含某个元素

语法

参数

  • element - 需要判断是否包含的元素

返回值类型

  • true - 包含
  • false - 不包含

  var listSearch1 = ["t1",1,2,"t3",4,5,2];
  
  var resContains1 = listSearch1.contains(4);
  var resContains2 = listSearch1.contains(3);
  
  print("resContains1: ${(resContains1)}");
  print("resContains2: ${(resContains2)}");

输出

resContains1: true
resContains2: false

 

获取从startIndex至endIndex包含的元素,返回Iterable接口的对象。

语法

参数

  • startIndex - 截取开始下标(包含)
  • endIndex - 截取结束下标(不包含)

返回值类型

返回Iterable对象

什么是Iterable对象?

  var listSearch1 = ["t1",1,2,"t3",4,5,2];
  
  var resGetRange = listSearch1.getRange(1, 3);
  print("resGetRange:${(resGetRange)},${(resGetRange is List)}");

输出

resGetRange:(1, 2),false

 

获取从startIndex至endIndex包含的元素,返回List对象。

语法

参数

  • startIndex - 截取开始下标(包含)
  • endIndex - 截取结束下标(不包含)

返回值类型

返回 List对象

  var listSearch1 = ["t1",1,2,"t3",4,5,2];
  
  var resSubList = listSearch1.sublist(1,4);
  print("resSubList:${(resSubList)},${(resSubList is List)}");

输出

resSubList:[1, 2, t3],true

 

返回所在下标的元素。

语法

参数

  • index - 想要查询的下标

返回值类型

所在下标的元素

  var listSearch1 = ["t1",1,2,"t3",4,5,2];
  var resElementAt = listSearch1.elementAt(3);
  print("resElementAt: ${(resElementAt)}");

输出

resElementAt: t3

 

判断List中的每个元素是否符合条件

语法

参数

  • expression - 判断List元素的条件表达式

返回值类型

  • true - 每个元素都符合条件
  • false - 至少一个元素不符合条件

  var listSearch2 = [1,2,3,4,5];
  
  var resEvery1 = listSearch2.every((element) => element > 2);
  var redEvery2 = listSearch2.every((element) => element > 0);
  
  print("resEvery1: ${(resEvery1)}");
  print("redEvery2: ${(redEvery2)}");

输出

resEvery1: false
redEvery2: true

 

返回List中第一个满足条件的元素。

语法

参数

  • expression - 判断条件

返回值类型

List中第一个满足条件的元素

  var listSearch2 = [1,2,3,4,5];
  var resFirstWhere = listSearch2.firstWhere((element) => element > 2.5);
  print("resFirstWhere: ${(resFirstWhere)}");

输出

resFirstWhere: 3

 

返回List中满足条件的所有元素中的最后一个元素。

语法

参数

  • expression - 表达式

返回值类型

List中满足条件的所有元素中的最后一个元素。

  var listSearch2 = [1,2,3,4,5];
  var resLastWhere = listSearch2.lastWhere((element) => element > 2.5);
  print("resLastWhere: ${(resLastWhere)}");

输出

resLastWhere: 5

 

跳过List中前 x 个元素,返回剩下元素。

语法

参数

  • index - 需要跳过的下标数(不包括当前下标)

返回值类型

返回 List 对象

  var listSearch5 = [1,6,4,5,3,2];
  var resSkip = listSearch5.skip(2);
  print("resSkip: ${(resSkip)}");

输出

resSkip: (4, 5, 3, 2)

 

跳过满足表达式的List元素,输出从第一个不满足表达式的List元素直至List结束的剩余List元素。

语法

参数

  • expression - 条件表达式

返回值类型

返回 List 对象

  var listSearch6 = [7,8,9,1,2,3,4,5,6,7,8,9];
  var resSkipWhile = listSearch6.skipWhile((value) => value > 4);
  print("resSkipWhile: ${(resSkipWhile)}");

输出

resSkipWhile: (1, 2, 3, 4, 5, 6, 7, 8, 9)

 

获取前 index 个List元素(不包含当前下标)。

语法

参数

  • index - 想要获取的元素的下标

返回值类型

返回 List 对象

  var listSearch6 = [7,8,9,1,2,3,4,5,6,7,8,9];
  var resTake = listSearch6.take(2);
  print("resTake: ${(resTake)}");

输出

(7, 8)

 

遍历List,输出元素直至不满足条件。

语法

参数

  • expression - 条件表达式

返回值类型

返回 List 对象

  var listSearch6 = [7,8,9,1,2,3,4,5,6,7,8,9];
  var resTakeWhile = listSearch6.takeWhile((value) => value > 4);
  print("resTakeWhile: ${(resTakeWhile)}");

输出

(7, 8, 9)

 

判断List元素是否都是某个类型。

语法

参数

  • Type - 类型

返回值类型

如果满足条件,则返回原List;否则,报错。

  var listSearch1 = ["t1",1,2,"t3",4,5,2];
  var listSearch6 = [7,8,9,1,2,3,4,5,6,7,8,9];
  
  var resCat1 = listSearch1.cast<int>();
  var resCat2 = listSearch6.cast<int>();

  print("resCat2: ${(resCat2)}");
  print("resCat1: ${(resCat1)}");

输出

resCat2: [7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: type 'String' is not a subtype of type 'int' in type cast
#0      _CastListBase.[] (dart:_internal/cast.dart:101:46)
#1      ListMixin.elementAt (dart:collection/list.dart:61:33)
#2      ListIterator.moveNext (dart:_internal/iterable.dart:346:26)
#3      StringBuffer.writeAll (dart:core-patch/string_buffer_patch.dart:96:19)
#4      IterableBase.iterableToFullString (dart:collection/iterable.dart:269:14)
#5      ListMixin.toString (dart:collection/list.dart:540:37)
#6      _StringBase._interpolate (dart:core-patch/string_patch.dart:842:19)
#7      listMethodSearch (package:flutter_app_one/List.dart:148:32)
#8      mainList (package:flutter_app_one/List.dart:6:3)
#9      main (package:flutter_app_one/main.dart:27:3)
#10     _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:240:25)
#11     _rootRun (dart:async/zone.dart:1126:13)
#12     _CustomZone.run (dart:async/zone.dart:1023:19)
#13     _runZoned (dart:async/zone.dart:151<…>

 

返回符合表达式的数组元素。

语法

参数

  • expression - 条件表达式

返回值类型

返回符合条件的元素的 List

  var listWhere = [1,2,3,4,5,6];
  var resWhere = listWhere.where((element) => element % 2 == 0);
  print("resWhere: ${(resWhere)}");

输出

resWhere: (2, 4, 6)

 

返回符合类型的 List 元素。

语法

参数

  • Type - 需要筛选的元素类型

返回值类型

返回符合类型的元素的 List

  var listWhereType = [1,2,"v3",4,5,"v6"];
  var resWhereType = listWhereType.whereType<String>();
  print("resWhereType:${(resWhereType)}");

输出

resWhereType:(v3, v6)

 

3)修改List

Dart允许修改List中项目的值。换句话说,可以重写列表项的值。以下 示例 说明了相同的情况:

  var listModify = [1,2,3,4];
  print(listModify);
  listModify[0] = 6;
  print(listModify);

输出

[1, 2, 3, 4]
[6, 2, 3, 4]
方法描述
sort([int compare(E a, E b)])
方法
List 排序
join(separator)方法将 List 按照拼接符拼接成字符串
asMap()方法将 List 根据下标和对应元素转成 Map
fillRange(int start, int end,
[E fillValue])
方法
根据给定的元素将指定范围的元素覆盖
setAll(int index,
Iterable<E> iterable)
方法
将List中的元素从 index 开始替换,
替换到给定List的长度结束
setRange(int start, int end,
Iterable<E> iterable,
[int skipCount = 0])
方法
将 List 中元素从 startIndex 开始替换
使用Iterable对象中的第skipCount元素开始,到 endIndex 结束
shuffle([Random random])方法随机打乱 List
map<T>(T f(E e)) =>
MappedIterable<E, T>(this, f)
方法
对 List 中每一个元素进行操作
返回Iterable对象
expand<T>(Iterable<T> f(E element)) =>
ExpandIterable<E, T>(this, f)
方法
展开 List
fold<T>(T initialValue,
T combine(T previousValue,
E element))
方法
把 initialValue 作为初始值,
迭代原数组,返回新的 value
reduce(E combine(E value, E element))
方法
value 为初始值为原始数组第一项,
后面是 combine 返回的项
replaceRange(int start, int end, Iterable<E> replacement)
方法
删除 start 到 end 的数据插入 replacement

 

List 排序。

语法

返回值类型

排序后的List

  var listSort1 = [2,3,7,1,5,9,0,8,6,4];
  listSort1.sort((a, b) => b - a);
  print("listSort1: ${(listSort1)}");

  var listSort2 = [2,3,7,1,5,9,0,8,6,4];
  listSort2.sort();
  print("listSort2: ${(listSort2)}");

输出

listSort1: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
listSort2: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

将 List 按照拼接符拼接成字符串。

语法

参数

  • separator - 分割符

返回值类型

字符串

  var listJoin = [1,2,3,4,5];
  var resJoin = listJoin.join("-");
  print("resJoin: ${(resJoin)}");

输出

resJoin: 1-2-3-4-5

 

将 List 根据下标和对应元素转成 Map。

语法

返回值类型

返回 Map 对象。

  var listAsMap = ["v1","v2","v3","v4","v5"];
  var mapFromList = listAsMap.asMap();
  print("mapFromList: ${(mapFromList)}");

输出

mapFromList: {0: v1, 1: v2, 2: v3, 3: v4, 4: v5}

 

根据给定的元素将指定范围的元素覆盖。

语法

参数

  • start - 开始替换的 index
  • end - 结束替换的 index
  • fillValue - 替换的元素

返回值类型

List 对象

例1

  var listFillRange = ["FR1","FR2","FR3","FR4","FR6","FR7","FR8","FR9"];
  listFillRange.fillRange(2, 4, "FR10");
  print("listFillRange:${(listFillRange)}");
  listFillRange.fillRange(6, 8, "FR68");
  print("listFillRange:${(listFillRange)}");

输出

listFillRange:[FR1, FR2, FR10, FR10, FR6, FR7, FR8, FR9]
listFillRange:[FR1, FR2, FR10, FR10, FR6, FR7, FR68, FR68]

注意:
 
startIndexendIndex 均不能超过 list.count - 1

例2

  var listFillRange = ["FR1","FR2","FR3","FR4","FR6","FR7","FR8","FR9"];
  listFillRange.fillRange(6, 9, "FR68");
  listFillRange.fillRange(10, 12,"FRError");
  print("listFillRange:${(listFillRange)}");

以上代码会输出如下错误:

[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: RangeError (start): Invalid value: Not in range 0..8, inclusive: 10
#0      RangeError.checkValidRange (dart:core/errors.dart:337:7)
#1      ListMixin.fillRange (dart:collection/list.dart:398:16)
#2      listMethodUpdate (package:flutter_app_one/List.dart:207:17)
#3      mainList (package:flutter_app_one/List.dart:7:3)
#4      main (package:flutter_app_one/main.dart:27:3)
#5      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:240:25)
#6      _rootRun (dart:async/zone.dart:1126:13)
#7      _CustomZone.run (dart:async/zone.dart:1023:19)
#8      _runZoned (dart:async/zone.dart:1518:10)
#9      runZoned (dart:async/zone.dart:1502:12)
#10     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:232:5)
#11     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#12     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

 

将List中的元素从 index 开始替换,替换到给定List的长度结束。

语法

参数

  • index - 开始替换的下标
  • iterable - 替换的元素

返回值类型

List 对象

例1

  var listSetAll = [1,2,3,4,5,6];
  listSetAll.setAll(1, [7,8,9]);
  print("listSetAll: ${(listSetAll)}");

输出

 listSetAll: [1, 7, 8, 9, 5, 6]

注意:
 
startIndex + iterable.count - 1 不能超过原数组中最大的下标数

例2

  var listSetAll = [1,2,3,4,5,6];
  listSetAll.setAll(4, [10,11,12]);
  print("listSetAll: ${(listSetAll)}");

以上代码将会输出如下错误:

[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: RangeError (end): Invalid value: Not in range 4..6, inclusive: 7
#0      RangeError.checkValidRange (dart:core/errors.dart:342:9)
#1      ListMixin.setRange (dart:collection/list.dart:405:16)
#2      List.setAll (dart:core-patch/growable_array.dart:64:7)
#3      listMethodUpdate (package:flutter_app_one/List.dart:213:14)
#4      mainList (package:flutter_app_one/List.dart:7:3)
#5      main (package:flutter_app_one/main.dart:27:3)
#6      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:240:25)
#7      _rootRun (dart:async/zone.dart:1126:13)
#8      _CustomZone.run (dart:async/zone.dart:1023:19)
#9      _runZoned (dart:async/zone.dart:1518:10)
#10     runZoned (dart:async/zone.dart:1502:12)
#11     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:232:5)
#12     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#13     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.d<…>

 

将 List 中元素从 startIndex 开始替换,使用Iterable对象中的第skipCount元素开始,到 endIndex 结束。

语法

参数

  • start - 开始替换的下标
  • end - 结束替换的下标
  • iterable - 替换的iterable对象
  • skipCount - 从替换的iterable对象的 skipCount 开始替换

返回值类型

List 对象

例1

  var listSetRange1 = ["SR1-0","SR1-1","SR1-2","SR1-3","SR1-4","SR1-5"];
  var listSetRange2 = ["SR2-0","SR2-1","SR2-2","SR2-3","SR2-4","SR2-5"];
  listSetRange1.setRange(1, 4, listSetRange2, 1);
  print("listSetRange1: ${(listSetRange1)}");

输出

listSetRange1: [SR1-0, SR2-1, SR2-2, SR2-3, SR1-4, SR1-5]

注意:
 
1.endIndexstartIndex均不能超过被替换的 List 的最大下标值
2.被替换的元素个数不能超过替换的 List 的元素个数

例2

  var listSetRange3 = ["SR3-0","SR3-1","SR3-2","SR3-3","SR3-4","SR3-5","SR3-6","SR3-7","SR3-8","SR3-9"];
  var listSetRange4 = ["SR4-0","SR4-1","SR4-2","SR4-3","SR4-4"];
  listSetRange3.setRange(8, 11, listSetRange4);
  print("listSetRange3: ${(listSetRange3)}");

以上代码输出如下报错:

[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: RangeError (end): Invalid value: Not in range 8..10, inclusive: 11
#0      RangeError.checkValidRange (dart:core/errors.dart:342:9)
#1      ListMixin.setRange (dart:collection/list.dart:405:16)
#2      listMethodUpdate (package:flutter_app_one/List.dart:223:17)
#3      mainList (package:flutter_app_one/List.dart:7:3)
#4      main (package:flutter_app_one/main.dart:27:3)
#5      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:240:25)
#6      _rootRun (dart:async/zone.dart:1126:13)
#7      _CustomZone.run (dart:async/zone.dart:1023:19)
#8      _runZoned (dart:async/zone.dart:1518:10)
#9      runZoned (dart:async/zone.dart:1502:12)
#10     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:232:5)
#11     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#12     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

例3

  var listSetRange3 = ["SR3-0","SR3-1","SR3-2","SR3-3","SR3-4","SR3-5","SR3-6","SR3-7","SR3-8","SR3-9"];
  var listSetRange4 = ["SR4-0","SR4-1","SR4-2","SR4-3","SR4-4"];
  listSetRange3.setRange(1, 8, listSetRange4);
  print("listSetRange3: ${(listSetRange3)}");

以上代码输出如下报错:

[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: Bad state: Too few elements
#0      ListMixin.setRange (dart:collection/list.dart:421:7)
#1      listMethodUpdate (package:flutter_app_one/List.dart:225:17)
#2      mainList (package:flutter_app_one/List.dart:7:3)
#3      main (package:flutter_app_one/main.dart:27:3)
#4      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:240:25)
#5      _rootRun (dart:async/zone.dart:1126:13)
#6      _CustomZone.run (dart:async/zone.dart:1023:19)
#7      _runZoned (dart:async/zone.dart:1518:10)
#8      runZoned (dart:async/zone.dart:1502:12)
#9      _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:232:5)
#10     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#11     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

 

随机打乱 List。

语法

返回值类型

List 对象

  var listShuffle = [1,2,3,4,5,6,7,8,9];
  listShuffle.shuffle();
  print("listShuffle: ${(listShuffle)}");

输出

listShuffle: [2, 1, 8, 6, 3, 7, 5, 9, 4]

 

对 List 中每一个元素进行操作,返回Iterable对象。

语法

返回值类型

Iterable 对象

  var listMap = [1,2,3,4,5];
  var resMap = listMap.map((e) => e * 2);
  print("resMap: ${(resMap)}");

输出

resMap: (2, 4, 6, 8, 10)

 

展开 List。

语法

返回值类型

List 对象

  var listExpand1 = [[1,2],[3,4],[5,6]];
  var resExpand1 = listExpand1.expand((element) => element).toList();
  print("resExpand1: ${(resExpand1)}");

  var listExpand2 = [1,2,3];
  var resExpand2 = listExpand2.expand((i) => [i+i]).toList();
  print("resExpand2: ${(resExpand2)}");

  var listExpand3 = [1,2,3];
  var resExpand3 = listExpand3.expand((element) => [element,element]).toList();
  print("resExpand3: ${(resExpand3)}");

输出

resExpand1: [1, 2, 3, 4, 5, 6]
resExpand2: [2, 4, 6]
resExpand3: [1, 1, 2, 2, 3, 3]

 

把 initialValue 作为初始值,迭代原数组,返回新的 value。

语法

  var listFold = [1,2,3,4,5];
  var resFold = listFold.fold(10, (previousValue, element) => previousValue + element);
  print("resFold: ${(resFold)}");

输出

resFold: 25

 

value 为初始值为原始数组第一项,后面是 combine 返回的项。

语法

  var listReduce = [1,2,3,4,5];
  var resReduce = listReduce.reduce((value, element) {
    return value * element;
  });
  print("resReduce: ${(resReduce)}");

输出

resReduce: 120

 

删除 start 到 end 的数据插入 replacement。

语法

参数

  • start - 开始index
  • end - 结束 index
  • replacement - 插入的元素 List

返回值类型

List 对象

  var listReplaceRange = [0,1,2,3,4,5];
  listReplaceRange.replaceRange(2, 4, [6,7,8,9]);
  print("listReplaceRange: ${(listReplaceRange)}");

输出

listReplaceRange: [0, 1, 6, 7, 8, 9, 4, 5]

 

4)删除List

方法描述
clear()方法清除 List 所有元素
remove(Object value)方法删除 List 中指定元素
removeAt(int index)方法删除 List 中指定下标的元素
removeRange(int start, int end)
方法
删除 List 中指定范围的元素
removeWhere(bool test(E element))
方法
删除 List 中满足条件的元素
retainWhere(bool test(E element))
方法
删除 List 中不满足条件的元素

清除 List 所有元素。

语法

  var listClear = [1,2,3,4,5];
  listClear.clear();
  print("listClear: ${(listClear)}");

输出

listClear: []

 

删除 List 中指定元素。

语法

参数

  • value - 元素

返回值类型

List 对象

  var listRemove = [1,2,3,4,5,3];
  listRemove.remove(3);
  print("listRemove: ${(listRemove)}");

输出

listRemove: [1, 2, 4, 5, 3]

 

删除 List 中指定下标的元素。

语法

参数

  • index - 需要删除的下标

返回值类型

List 对象

例1

  var listRemoveAt = [1,2,3,4,5];
  listRemoveAt.removeAt(1);
  print("listRemoveAt: ${(listRemoveAt)}");

输出

listRemoveAt: [1, 3, 4, 5]

注意:
 
下标不能越界。

例2

  listRemoveAt.removeAt(7);
  print("listRemoveAt: ${(listRemoveAt)}");

以上代码输出如下报错:

[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: RangeError (index): Invalid value: Not in range 0..3, inclusive: 7
#0      List.[] (dart:core-patch/growable_array.dart:146:60)
#1      List.removeAt (dart:core-patch/growable_array.dart:26:22)
#2      listMethodDelete (package:flutter_app_one/List.dart:273:16)
#3      mainList (package:flutter_app_one/List.dart:8:3)
#4      main (package:flutter_app_one/main.dart:27:3)
#5      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:240:25)
#6      _rootRun (dart:async/zone.dart:1126:13)
#7      _CustomZone.run (dart:async/zone.dart:1023:19)
#8      _runZoned (dart:async/zone.dart:1518:10)
#9      runZoned (dart:async/zone.dart:1502:12)
#10     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:232:5)
#11     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#12     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

 

删除 List 中指定范围的元素

语法

参数

  • start - 开始下标
  • end - 结束下标

返回值类型

List 对象

例1

  var listRemoveRange = [0,1,2,3,4,5];
  listRemoveRange.removeRange(1, 3);
  print("listRemoveRange: ${(listRemoveRange)}");

输出

listRemoveRange: [0, 3, 4, 5]

注意:
 
开始下标和结束下标均不能越界。

例2

  listRemoveRange.removeRange(4, 7);
  print("listRemoveRange: ${(listRemoveRange)}");

以上代码输出如下报错:

[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: RangeError (end): Invalid value: Only valid value is 4: 7
#0      RangeError.checkValidRange (dart:core/errors.dart:342:9)
#1      List.removeRange (dart:core-patch/growable_array.dart:73:16)
#2      listMethodDelete (package:flutter_app_one/List.dart:281:19)
#3      mainList (package:flutter_app_one/List.dart:8:3)
#4      main (package:flutter_app_one/main.dart:27:3)
#5      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:240:25)
#6      _rootRun (dart:async/zone.dart:1126:13)
#7      _CustomZone.run (dart:async/zone.dart:1023:19)
#8      _runZoned (dart:async/zone.dart:1518:10)
#9      runZoned (dart:async/zone.dart:1502:12)
#10     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:232:5)
#11     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#12     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

 

删除 List 中满足条件的元素。

语法

返回值类型

List 对象

  var listRemoveWhere = [0,1,2,3,4,5];
  listRemoveWhere.removeWhere((element) => element > 2);
  print("listRemoveWhere: ${(listRemoveWhere)}");

输出

listRemoveWhere: [0, 1, 2]

 

删除 List 中不满足条件的元素。

语法

返回值类型

List 对象

  var listRetainWhere = [0,1,2,3,4,5];
  listRetainWhere.retainWhere((element) => element > 2);
  print("listRetainWhere: ${(listRetainWhere)}");

输出

listRetainWhere: [3, 4, 5]

 

5)遍历List

  var listForIn = [1,2,3,4,5];
  for(var item in listForIn) {
    print("listForIn - item: ${(item)}");
  }

输出

listForIn - item: 1
listForIn - item: 2
listForIn - item: 3
listForIn - item: 4
listForIn - item: 5

 

  var listForEach = ["each1","each2","each3","each4","each5"];
  listForEach.forEach((element) {
    print("element: ${(element)}");
  });

输出

element: each1
element: each2
element: each3
element: each4
element: each5

参考链接: