Skip to content
On this page

前言

  • Set 是一种集合数据结构,用于存储一组唯一的元素,其中重复的元素将被自动忽略。与 List 不同,Set 中的元素没有固定的顺序

常用属性

  • length 长度
  • first 第一项
  • last 最后一项
  • isEmpty 空
  • isNotEmpty 不为空
  • runtimeType 类型
dart
Set<int> s1 = {1, 2, 3};
  final len = s1.length; // 3
  final first = s1.first; // 1
  final last = s1.last; // 3
  final isEmpty = s1.isEmpty; // false
  final isNotEmpty = s1.isNotEmpty; // true
  final runtimeType = s1.runtimeType; //  _Set<int>

增删查

  • add\addAll 新增
  • remove、removeAll、removeWhere 删除
  • elementAt(index) 查
  • clear() 清空
  • Set 本身是不会重复的所以一般不存在改,要么新增 要么删除
dart
  Set<int> s1 = {1, 2, 3};
  // 新增
  s1.add(4); // {1, 2, 3, 4}
  s1.addAll({5, 6}); // {1, 2, 3, 4, 5, 6}
  s1.remove(6); // {1, 2, 3, 4, 5}
  s1.removeAll({1, 2}); // {3, 4, 5}
  s1.removeWhere((item) => item < 4); // {4, 5}
  s1.elementAt(0); // 4
  s1.clear(); // {}

常用循环

  • map 返回新对象
  • every 是否每一项都满足条件 返回 bool
  • any 任意一项满足条件 返回 bool
  • fold(initval, (pre.cur)=> pre+xur) 带初始值做累加累乘等
  • reduce( (pre.cur)=> pre+xur) 做累加累乘等
  • for 循环 set.elementAt(index)
  • for in 循环
dart
  Set<int> s1 = {1, 2, 3};
  s1.forEach(print); // 1 2 3
  final s2 = s1.map((e) => e * 2).toSet(); // {2, 4, 6}
  bool b1 = s1.every((element) => element > 0); // true
  bool b2 = s1.any((element) => element > 2); // true
  int b3 = s1.fold(100, (pre, cur) => pre + cur); // 106
  int b4 = s1.reduce((pre, cur) => pre + cur); // 6

  for (var i = 0; i < s1.length; i++) {
    print(s1.elementAt(i)); // // 1 2 3
  }

  for (var item in s1) {
    print(item); // 1 2 3
  }

contains、containsAll

  • contains(item) 是否包含某个元素 返回 bool
  • containsAll({1,2,3}) 是否包含所有元素 返回bool
dart
  Set<int> s1 = {1, 2, 3};
  final b1 = s1.contains(1); // true
  final b2 = s1.contains(4); // false
  final b3 = s1.containsAll({1, 2, 3}); // true
  final b4 = s1.containsAll({1, 4, 3}); // false

difference

  • difference({})找出和另一个set对象不同的元素
  • (自己有,别的没有)
dart
  Set<int> s1 = {1, 2, 3};
  final d1 = s1.difference({2, 4}); // {1, 3}
  final d2 = s1.difference({1, 2, 4}); // {3}
  final d3 = s1.difference({1, 2, 3}); // {}
  final d4 = s1.difference({}); // {1, 2, 3}

elementAt

  • elementAt(index) 通过索引访问元素
dart
  Set<int> s1 = {1, 2, 3};

  final item1 = s1.elementAt(0); // 1
  final item2 = s1.elementAt(2); // 3

  //RangeError (index): Index out of range: index should be less than 3: 3
  // final item3 = s1.elementAt(3); // 索引越界 报错

intersection

  • s1.intersection(s2)
  • 创建一个 set1 和 set2 共同元素组成的新set对象
dart
  Set<int> s1 = {1, 2, 3};
  final s2 = s1.intersection({1, 2, 3, 4}); // {1, 2, 3}
  final s3 = s1.intersection({1}); // {1}
  final s4 = s1.intersection({}); // {}

retainAll

  • s1.retainAll(s2)
  • s1中只保留与s2共有的元素
dart
  Set<int> s1 = {1, 2, 3};

  s1.retainAll({1, 2, 3, 4, 5}); // s1: {1, 2, 3}
  s1.retainAll({1, 2}); // s1: {1, 2}
  s1.retainAll({1}); // s1: {1}
  s1.retainAll({}); // s1: {}

join

  • s1.join('xx')
  • s1 通过 'xx' 拼接成新的字符串
  • 不影响 原数据
dart
 Set<int> s1 = {1, 2, 3};
  final str = s1.join('-'); // "1-2-3"
  final str1 = s1.join('*'); // "1*2*3"
  print(s1); // {1, 2, 3}