《深入浅出Dart》集合类型

2023-07-27 16:13:05 浏览数 (2)

现代JavaScript高级小册

深入浅出Dart

现代TypeScript高级小册

Dart中的集合类型

Dart 提供了一系列的集合类型,其中包括 Map 和 Set。本文将简要介绍 Dart 中的 Map 和 Set,以及如何在 Dart 中使用这两种数据结构。

Dart中的List

Dart中的List是一种重要的数据类型,可以存储一系列有序的元素,元素的类型可以是任意类型,包括数字,字符串,布尔值,对象,甚至是其他List。它类似于其他编程语言中的数组,但具有更多的内置方法和功能。

创建和初始化List

在Dart中,你可以通过几种不同的方式创建和初始化List:

代码语言:javascript复制
// 创建空列表
var emptyList = [];

// 创建具有几个初始元素的列表
var initializedList = [1, 2, 3, 4, 5];

// 使用List构造函数创建列表
var listWithConstructor = List<int>.filled(5, 0); // 创建一个包含5个0的列表

访问和修改List元素

你可以使用索引(从0开始)来访问和修改List中的元素:

代码语言:javascript复制
var myList = [1, 2, 3];
print(myList[0]);  // 输出1
myList[0] = 10;
print(myList[0]);  // 输出10

List的主要方法

List类提供了一些方法来处理和操作列表。以下是一些常用的List方法:

  • add(element): 在List的末尾添加一个元素
  • insert(index, element): 在指定索引处插入一个元素
  • remove(element): 删除列表中首个匹配的元素
  • removeAt(index): 删除指定索引处的元素
  • indexOf(element): 查找指定元素的索引,如果元素不存在,则返回-1
  • contains(element): 检查列表是否包含指定元素,如果包含则返回true,否则返回false
  • sort([compareFunction]): 对List的元素进行排序,可以提供一个可选的比较函数

以下是这些方法的使用示例:

代码语言:javascript复制
var myList = [1, 2, 3];

myList.add(4);
print(myList);  // 输出 [1, 2, 3, 4]

myList.insert(0, 0);
print(myList);  // 输出 [0, 1, 2, 3, 4]

myList.remove(2);
print(myList);  // 输出 [0, 1, 3, 4]

myList.removeAt(0);
print(myList);  // 输出 [1, 3, 4]

print(myList.indexOf(3));  // 输出 1

print(myList.contains(2));  // 输出 false

myList.sort();
print(myList);  // 输出 [1, 3, 4]

Dart中的Map

Dart中的Map是一种无序的键值对集合,其中的键和值都可以是任何类型。它是一个动态集合,这意味着你可以在运行时向其中添加或删除键值对。Map在很多场景下都很有用,例如,当你需要通过一种方式(键)来查找或访问数据(值)时。

创建和初始化Map

在Dart中,你可以通过以下几种方式创建和初始化Map:

代码语言:javascript复制
// 创建空的Map
var emptyMap = {};

// 创建并初始化Map
var initializedMap = {
  'key1': 'value1',
  'key2': 'value2',
  'key3': 'value3',
};

// 使用Map构造函数创建Map
var mapWithConstructor = Map();

访问和修改Map元素

你可以通过键来访问和修改Map中的值:

代码语言:javascript复制
var myMap = {
  'key1': 'value1',
  'key2': 'value2',
};

print(myMap['key1']);  // 输出 'value1'

myMap['key1'] = 'new value1';
print(myMap['key1']);  // 输出 'new value1'

Map的主要方法

Map类提供了一些方法来处理和操作键值对。以下是一些常用的Map方法:

  • containsKey(key): 检查Map是否包含指定的键
  • containsValue(value): 检查Map是否包含指定的值
  • remove(key): 删除指定的键及其对应的值
  • addAll(other): 将其他Map的键值对添加到当前Map中
  • clear(): 删除Map中的所有键值对

以下是这些方法的使用示例:

代码语言:javascript复制
var myMap = {
  'key1': 'value1',
  'key2': 'value2',
};

print(myMap.containsKey('key1'));  // 输出 true
print(myMap.containsValue('value3'));  // 输出 false

myMap.remove('key1');
print(myMap);  // 输出 {key2: value2}

myMap.addAll({'key3': 'value3', 'key4': 'value4'});
print(myMap);  // 输出 {key2: value2, key3: value3, key4: value4}

myMap.clear();
print(myMap);  // 输出 {}

Dart中的Set

Dart中的Set是一种无序的、包含唯一项的集合,所有的元素都是唯一的,没有重复项。这意味着无论你尝试将同样的项目添加到Set中多少次,它都只会出现一次。

创建和初始化Set

在Dart中,你可以通过以下几种方式创建和初始化Set:

代码语言:javascript复制
// 创建空的Set
var emptySet = <String>{};

// 创建并初始化Set
var initializedSet = {'item1', 'item2', 'item3'};

// 使用Set构造函数创建Set
var setWithConstructor = Set<String>();

注意:如果你尝试创建一个空的Set但未指定类型,Dart会创建一个动态类型的Map。因此,为了创建一个空的Set,你需要在创建Set时提供一个类型参数。

添加和删除Set元素

你可以使用addremove方法向Set中添加或删除元素:

代码语言:javascript复制
var mySet = {'item1', 'item2', 'item3'};

mySet.add('item4');
print(mySet);  // 输出 {item1, item2, item3, item4}

mySet.remove('item1');
print(mySet);  // 输出 {item2, item3, item4}

Set的主要方法

Set类提供了一些方法来处理和操作集合。以下是一些常用的Set方法:

  • contains(element): 检查Set是否包含指定的元素
  • union(other): 返回一个新的Set,包含当前Set和另一个Set中所有的元素
  • intersection(other): 返回一个新的Set,包含当前Set和另一个Set中共有的元素
  • difference(other): 返回一个新的Set,包含当前Set中的元素,但不包含另一个Set中的元素

以下是这些方法的使用示例:

代码语言:javascript复制
var mySet1 = {'item1', 'item2', 'item3'};
var mySet2 = {'item2', 'item3', 'item4'};

print(mySet1.contains('item1'));  // 输出 true

var unionSet = mySet1.union(mySet2);
print(unionSet);  // 输出 {item1, item2, item3, item4}

var intersectionSet = mySet1.intersection(mySet2);
print(intersectionSet);  // 输出 {item2, item3}

var differenceSet = mySet1.difference(mySet2);
print(differenceSet);  // 输出 {item1}

0 人点赞