3-2、Dart集合

(1)Dart集合框架

  • List:只是一组有序的对象,dart:core库提供了List类
  • Set:表示对象的集合,其中每个对象只能出现一次
  • Map:对象是一个简单的键/值对。映射中的键和值可以是任何类型。映射是动态集合。换句话说,Maps可以在运行时增长和缩小
  • Queue:队列是一个可以在两端操纵的集合。当想要构建先进先出集合时,队列非常有用

(2)List集合

  • 列表可分为两种
    • 固定长度列表
    • 可增长列表
// 固定长度列表
var lst =new List(3);
lst[0] = 12;
lst[1] = 22;
lst[2] = 32;
// lst.add(111); Cannot add to a fixed-length list
print(lst);

// 可增长列表
var lst1 = [1,2,3];
var lst2 = [];
var lst3 = new List();
lst2.add(12);
print(lst2);
  • 常用方法
  // 固定长度列表
  var lst =new List(3);
  lst[0] = 12;
  lst[1] = 22;
  lst[2] = 32;
  print(lst);
  print(lst.first);
  print(lst.last);
  print(lst.length);
  print(lst.isEmpty);
  print(lst.isNotEmpty);
  // 检查列表是否只有一个元素并返回它,否则抛出异常
//  print(lst.single);
  print(lst.reversed);
  • 一般使用
// 列表类型 变量
var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);
list[1] = 1;
assert(list[1] == 1);

// 列表类型 常量
var constList = const [1,2,3];
// Cannot modify an unmodifiable list
// 编译时常量的列表类型,不可被修改
constList[1] = 3;
  • 拓展运算符
// 拓展运算符
var list1 = [1, 2, 3];
var list2 = [0, ...list1];
assert(list2.length == 4);

// 避免...右侧的表达式为null的情况
var list3;
var list4 = [0, ...?list3];
assert(list4.length == 1);
  • 列表+if
var promoActive = true;
var nav = [
  'Home',
  'Furniture',
  'Plants',
  if (promoActive) 'Outlet'
];
assert(nav.length == 4);
  • 列表+for
var listOfInts = [1, 2, 3];
// ['#0','#1','#2','#3']
var listOfStrings = [
  '#0',
  for (var i in listOfInts) '#$i'
];
assert(listOfStrings[1] == '#1');

(3)Set集合

  • 表示对象的集合,其中每个对象只能出现一次
var name1 = {'a',"b",'c','d'};
Set<String> name2 = {'a',"b",'c','d'};
Set<String> name3 = {};
Set<String> name4 = const {'a',"b",'c','d'};
name3.add("e");
name3.addAll(name2);
Set numberSet = new Set();
numberSet.add(100);
numberSet.add(20);
numberSet.add(5);
numberSet.add(60);
numberSet.add(70);
  • 试试
Set numberSet = new Set.from([12,13,14]);
// _CompactLinkedHashSet<dynamic>
print('${numberSet.runtimeType}');
for(var no in numberSet) {
  print(no);
}
  • HashSet是一种基于无序散列表的Set实现
top Created with Sketch.