??目录
与其他编程语言不同,Dart不支持数组。Dart集合可用于复制数组结构等数据结构。dart:core库和其他类在Dart脚本中启用Collection支持。 ?
List
List只是一组有序的对象。该 dart:core 库提供的列表类,使创建和列表的操作。
Dart中的列表可归类为:
- 固定长度列表 - 列表的长度在运行时不能更改。
- 可增长列表 - 列表的长度可以在运行时更改。
示例
List logTypes = new List();
logTypes.add("WARNING");
logTypes.add("ERROR");
logTypes.add("INFO");
for(String type in logTypes){
print("logTypes: ${(type)}");
}
print("logTypes.length: ${(logTypes.length)}");
logTypes.remove("WARNING");
print("size after removing.");
print("logTypes.length: ${(logTypes.length)}");
上述代码的输出如下
logTypes: WARNING
logTypes: ERROR
logTypes: INFO
logTypes.length: 3
size after removing.
logTypes.length: 2
?
Set
Set表示对象的集合,其中每个对象只能出现一次。dart:core库提供了Set类来实现相同的功能。
语法
Identifier = new Set()
或者
Identifier = new Set.from(Iterable)
其中, Iterable 表示要添加到Set的值列表。
示例
Set numberSet = new Set();
numberSet.add(100);
numberSet.add(20);
numberSet.add(5);
numberSet.add(60);
numberSet.add(70);
print("numberSet: Default implementation :${(numberSet.runtimeType)}");
for(var no in numberSet) {
print("numberSet - ${(no)}");
}
它应该产生以下输出
numberSet: Default implementation :_CompactLinkedHashSet<dynamic>
numberSet - 100
numberSet - 20
numberSet - 5
numberSet - 60
numberSet - 70
Set.from()
Set setFrom = new Set.from([12,13,14]);
print("setFrom: Default implementation :${(setFrom.runtimeType)}");
for(var no in setFrom) {
print("setFrom - ${(no)}");
}
它应该产生以下输出
flutter: setFrom: Default implementation :_CompactLinkedHashSet<dynamic>
flutter: setFrom - 12
flutter: setFrom - 13
flutter: setFrom - 14
HashMap
HashMap是基于哈希表的Map实现。当您遍历HashMap的键或值时,您不能指望某个订单。相同的语法如下:
语法
Identifier = new HashMap()
示例
var hashMap = new HashMap();
hashMap['dept'] = 'HR';
hashMap['name'] = 'Tom';
hashMap['email'] = 'tom@xyz.com';
print('hashMap: ${(hashMap)}');
它应该产生以下输出
hashMap: {email: tom@xyz.com, dept: HR, name: Tom}
将多个值添加到HashMap
HashMap类从Map类继承 addAll() 函数。此功能可以一次添加多个值。
语法
HashMap.addAll(Iterable)
其中, Iterable 表示要插入的值列表。
示例
var hashMapAddAll = new HashMap();
hashMapAddAll.addAll({'dept':'HR','email':'tom@xyz.com'});
print('hashMapAddAll: ${(hashMapAddAll)}');
它应该产生以下输出
hashMapAddAll: {email: tom@xyz.com, dept: HR}
从HashMap中删除值
remove() 和 clear() 函数用于从HashMap中删除条目。remove() 函数传递一个表示要删除的条目的密钥。clear() 函数用于从Map中删除所有条目。
示例
var hashMapRemove = new HashMap();
hashMapRemove.addAll({'dept':'HR','email':'tom@xyz.com', 'name':'Tom'});
print("hashMapRemove - before: ${(hashMapRemove)}");
hashMapRemove.remove('dept');
print("hashMapRemove - afeter: ${(hashMapRemove)}");
var hashMapClear = new HashMap();
hashMapClear.addAll({'dept':'HR','email':'tom@xyz.com', 'name':'Tom'});
print("hashMapClear - before: ${(hashMapClear)}");
hashMapClear.clear();
print("hashMapClear - after: ${(hashMapClear)}");
它应该产生以下输出
hashMapRemove - before: {email: tom@xyz.com, dept: HR, name: Tom}
hashMapRemove - afeter: {email: tom@xyz.com, name: Tom}
hashMapClear - before: {email: tom@xyz.com, dept: HR, name: Tom}
hashMapClear - after: {}
HashSet
HashSet是一种基于无序散列表的Set实现。
语法
Identifier = new HashSet()
该 add() 函数可用于填充HashSet实例。
示例
var hashSet = new HashSet();
hashSet.add(100);
hashSet.add(20);
hashSet.add(5);
hashSet.add(60);
hashSet.add(70);
print("hashSet: ${hashSet.runtimeType}");
for(var no in hashSet) {
print("hashSet - ${(no)}");
}
它应该产生以下输出
hashSet: _HashSet<dynamic>
hashSet - 60
hashSet - 20
hashSet - 100
hashSet - 5
hashSet - 70
将多个值添加到HashSet
所述 addAll() 函数允许添加多个值给HashSet的。
示例
var hashSetAddAll = new HashSet();
hashSetAddAll.addAll([100,200,300]);
print("hashSetAddAll: ${hashSetAddAll.runtimeType}");
for(var no in hashSetAddAll) {
print("hashSetAddAll - ${(no)}");
}
它应该产生以下输出
hashSetAddAll: _HashSet<dynamic>
hashSetAddAll - 200
hashSetAddAll - 300
hashSetAddAll - 100
从哈希集中删除值
remove() 函数删除传递给它的值。clear() 函数从HashSet中所有条目。
示例
var hashSetRemove = new HashSet();
hashSetRemove.addAll([100,200,300]);
print("hashSetRemove - before: ${(hashSetRemove)}");
hashSetRemove.remove(100);
print("hashSetRemove - after: ${(hashSetRemove)}");
var hashSetClear = new HashSet();
hashSetClear.addAll([100,200,300]);
print("hashSetClear - before: ${(hashSetClear)}");
hashSetClear.clear();
print("hashSetClear - after: ${(hashSetClear)}");
它应该产生以下输出
hashSetRemove - before: {200, 300, 100}
hashSetRemove - after: {200, 300}
hashSetClear - before: {200, 300, 100}
hashSetClear - after: {}
?
Map
Map对象是一个简单的键/值对。地图中的键和值可以是任何类型。地图是动态集合。换句话说,Maps可以在运行时增长和缩小。dart:core库中的Map类提供了对它的支持。
示例
var details = new Map();
details['userName']='admin';
details['password']='admin@123';
print("details: ${(details)}");
它应该产生以下输出
details: {userName: admin, password: admin@123}
?
Queue
队列是一个可以在两端操作的集合。当您想要构建先进先出集合时,队列非常有用。简而言之,队列从一端插入数据并从另一端删除。按插入顺序删除/读取值。
语法
Identifier = new Queue()
add() 函数可用于将值插入队列。此函数将指定的值插入队列末尾。
示例
var queue = new Queue();
queue.add(10);
queue.add(20);
queue.add(30);
queue.add(40);
print("queue: Default implementation ${queue.runtimeType}");
for(var no in queue){
print("queue - ${(no)}");
}
它应该产生以下输出
queue: Default implementation ListQueue<dynamic>
queue - 10
queue - 20
queue - 30
queue - 40
将多个值添加到队列
addAll() 函数使得能够加入多个值到一个队列,一次全部。此函数采用可迭代的值列表。
示例
var queueAddAll = new Queue();
queueAddAll.addAll([10,12,13,14]);
print("queueAddAll: Default implementation ${queueAddAll.runtimeType}");
for(var no in queueAddAll){
print("queueAddAll - ${(no)}");
}
它应该产生以下输出
flutter: queueAddAll: Default implementation ListQueue<dynamic>
flutter: queueAddAll - 10
flutter: queueAddAll - 12
flutter: queueAddAll - 13
flutter: queueAddAll - 14
在队列的开头和结尾添加值
addFirst() 方法将指定的值到队列的开头。此函数传递一个对象,该对象表示要添加的值。addLast() 函数将指定的对象到队列的末尾。
示例1
var queueAddFirst = new Queue();
queueAddFirst.addAll([100,200,300]);
print("queueAddFirst: ${(queueAddFirst)}");
queueAddFirst.addFirst(400);
print("queueAddFirst: ${(queueAddFirst)}");
它应该产生以下 输出
queueAddFirst: {100, 200, 300}
queueAddFirst: {400, 100, 200, 300}
示例2
var queueAddLast = new Queue();
queueAddLast.addAll([1,2,3,4]);
print("queueAddLast: ${(queueAddLast)}");
queueAddLast.addLast(5);
print("queueAddLast: ${(queueAddLast)}");
它应该产生以下输出
queueAddLast: {1, 2, 3, 4}
queueAddLast: {1, 2, 3, 4, 5}
?
迭代集合
来自dart:core库的Iterator 类可以轻松进行集合遍历。每个集合都有一个迭代器属性。此属性返回指向集合中对象的迭代器。
示例
moveNext() 函数返回一个布尔值指示是否存在后续的条目。迭代器对象的当前属性返回迭代器当前指向的对象的值。
var numQ = new Queue();
numQ.addAll([100, 200, 300]);
var numIterative =numQ.iterator;
while(numIterative.moveNext()) {
print(numIterative.current);
}
输出结果
100
200
300
|