Set

Set 是没有顺序且不能重复的集合,所以不能通过索引去获取值。

创建集合

var testSet = new Set();
print(testSet.length); // 0
// var testSet2 = new Set(2); // 错误,Set没有固定元素的定义
testSet.add(1);
testSet.add(1); // 重复元素无效
testSet.add("a"); // {1, "a"}
testSet.addAll(['b', 'c']); // (1, 'a', 'b', 'c')
testSet.remove('b'); // (1, 'a', 'c')
print(testSet.contains(1)); // true

通过 Set.fromSet.of 转换

var l = [1,2,2,3,3];
var s = Set.from(l); // {1, 2, 3}
var l = [1,2,2,3,3];
var s = Set.of(l); // {1, 2, 3}

使用泛型

var testSet = new Set<int>();
testSet.add(1);

直接赋值

var s = {1, 2, 3};

常用属性及方法

Set 继承了 Iterable 的属性及方法, 重写了部分属性及方法

添加

  • add(E value) → bool
  • addAll(Iterable<E> elements) → void
var testSet = new Set<int>();
testSet.add(1); // {1}
testSet.addAll({2,2,3}); // {1, 2, 3}

移除

  • remove(Object value) → bool
  • removeAll(Iterable<Object> elements) → void
var testSet = {1,2,3};
testSet.remove(2);
testSet.removeAll({1, 3});

其他

  • contains(Object value) → bool 是否包含某个元素
  • containsAll(Iterable<Object> other) → bool 是否包含多个元素
var testSet = {1,2,3};
print(testSet.contains(1)); // true
print(testSet.containsAll({2,3})); // true
  • difference(Set<Object> other) → Set<E> 返回与传入 Set 不同的元素
var testSet1 = {1,2,3};
var testSet2 = {2,3,4};
print(testSet1.difference(testSet2)); // {1}
  • clear() → void 清空 Set

类型转换

转换为 List<E>

var testSet = Set.from(["a", "b", "c"]);
var listIter = testSet.map((v) => v.toUpperCase()).toList(); // [A, B, C]

高阶函数

map

var testSet = {1,2,3};
var setIter = testSet.map((v) => v + 1); // (2, 3, 4)

其他高阶函数

  • every(bool test(E element)) → bool
  • any(bool test(E element)) → bool
  • where(bool test(E element)) → Iterable<E>

参考资料

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress