Dart速来系列2,集合:列表List,集合Map,集合Set,枚举enum

在Dart中,集合是一种用于存储和操作多个数据项的数据结构。本篇博客将详细介绍Dart中常用的集合类型,包括列表(List)、映射(Map)、集(Set)以及枚举(enum)。我们将深入探讨它们的是什么、好处、怎么用,并提供丰富的代码例子说明,同时还介绍在开发中的使用场景和注意事项。

1. 列表(List)

1.1 是什么?

列表是一种有序的集合,用于存储多个数据项。在Dart中,列表使用List类来表示。

1.2 好处

  • 列表保持元素的插入顺序,允许重复元素的存在。
  • 列表提供了丰富的操作方法,如添加元素、删除元素、访问元素、查找元素等。

1.3 怎么用?

列表可以使用字面量或构造函数来创建,并且可以根据需要添加、访问和修改列表中的元素。

例子

List<int> numbers = [1, 2, 3, 4, 5]; // 创建整数类型的列表
List<String> names = ['Alice', 'Bob', 'Charlie']; // 创建字符串类型的列表

numbers.add(6); // 向列表末尾添加元素
names.insert(1, 'David'); // 在索引1处插入元素

int removedNumber = numbers.removeLast(); // 移除并返回最后一个元素
String removedName = names.removeAt(0); // 移除并返回索引0处的元素

bool containsNumber = numbers.contains(3); // 检查列表是否包含元素3
int indexOfName = names.indexOf('Charlie'); // 查找元素'Charlie'的索引

print(numbers); // 输出:[1, 2, 3, 4, 5, 6]
print(names); // 输出:['David', 'Bob', 'Charlie']

1.4 使用时需要注意什么?

  • Dart中的列表是动态的,可以根据需要自动调整大小。
  • 可以使用泛型来限制列表中的元素类型,例如List<int>表示整数类型的列表。
  • 列表使用0-based索引,即第一个元素的索引为0。

在开发中的使用场景

  • 列表常用于存储和处理多个相关的数据项,如用户列表、商品列表等。
  • 列表可以通过索引访问和修改元素,适用于需要按照顺序处理数据的场景。
  • 列表还提供了许多内置方法和操作符,如排序、过滤、映射等,使数据处理更加方便。

与Java和Kotlin相比:

  • 在Java和Kotlin中,列表的声明和使用与Dart类似,分别为List<Integer>(Java)和List<Int>(Kotlin)。
  • Java和Kotlin提供了丰富的API和方法来操作和处理列表。

2. 映射(Map)

2.1 是什么?

映射是一种键值对的集合,每个键对应一个值。在Dart中,映射使用Map类来表示。

2.2 好处

  • 映射提供了高效的键值对查找和访问。
  • 可以通过键快速找到对应的值,避免遍历整个集合进行查找。

2.3 怎么用?

映射可以使用字面量或构造函数来创建,并且可以根据需要添加、访问和修改映射中的键值对。

代码

Map<String, int> studentScores = {
  'Alice': 95,
  'Bob': 87,
  'Charlie': 92,
}; // 创建字符串键和整数值的映射

studentScores['David'] = 90; // 添加新的键值对

int aliceScore = studentScores['Alice']; // 根据键获取值

studentScores.remove('Bob'); // 移除键为'Bob'的键值对

bool containsCharlie = studentScores.containsKey('Charlie'); // 检查映射中是否包含键'Charlie'

print(studentScores); // 输出:{'Alice': 95, 'Charlie': 92, 'David': 90}

2.4 使用时需要注意什么?

  • Dart中的映射使用键值对存储数据,键必须是唯一的,而值可以重复。
  • 可以使用泛型来限制映射中键和值的类型,例如Map<String, int>表示键为字符串类型、值为整数类型的映射。
  • 注意在使用键获取值时,如果映射中不存在对应的键,则会返回null

在开发中的使用场景

  • 映射常用于存储和查询具有唯一键的数据项,如用户信息、配置参数等。
  • 映射提供了快速的键值对查找和访问,适用于需要通过键快速找到对应值的场景。
  • 映射还可用于处理和组织复杂的数据结构,如图形结构、数据库查询结果等。

与Java和Kotlin相比:

  • 在Java和Kotlin中,映射的声明和使用与Dart类似,分别为Map<String, Integer>(Java)和Map<String, Int>(Kotlin)。
  • Java和Kotlin提供了丰富的API和方法来操作和处理映射。

3. 集合Set

3.1 是什么?

集合是一种无序且不重复的数据结构,用于存储一组唯一的数据项。在Dart中,集合使用Set类来表示。

3.2 好处

  • 集合提供了高效的元素查找和去重功能。
  • 集合中的元素是唯一的,可以用于快速判断元素是否存在于集合中。

3.3 怎么用?

可以使用字面量或构造函数来创建集合,并且可以根据需要添加、访问和修改集合中的元素。

Set<int> numbers = {1, 2, 3, 4, 5}; // 使用字面量创建整数类型的集合
Set<String> names = {'Alice', 'Bob', 'Charlie'}; // 使用字面量创建字符串类型的集合

// 使用构造函数创建空集合
Set<double> grades = Set();
grades.add(3.5); // 向集合中添加元素
grades.addAll([4.0, 3.2, 3.8]); // 向集合中添加多个元素

代码

Set<int> numbers = {1, 2, 3, 4, 5}; // 创建整数类型的集合
Set<String> names = {'Alice', 'Bob', 'Charlie'}; // 创建字符串类型的集合

numbers.add(6); // 向集合中添加元素
names.remove('Bob'); // 从集合中移除元素

bool containsAlice = numbers.contains(3); // 检查集合中是否包含元素3

print(numbers); // 输出:{1, 2, 3, 4, 5, 6}
print(names); // 输出:{'Alice', 'Charlie'}

3.4 使用时需要注意什么?

  • Dart中的集合保持元素的插入顺序,并且集合中的元素是唯一的,不允许重复。
  • 集合使用哈希值来确定元素的唯一性和相等性,因此在使用自定义对象时,需要正确实现对象的hashCode==方法。

在开发中的使用场景

  • 集合常用于去重和快速判断元素是否存在的场景。
  • 集合还可以用于处理需要唯一性的数据项集合,如标签集合、分类集合等。

与Java和Kotlin相比:

  • 在Java和Kotlin中,集合的声明和使用与Dart类似,分别为Set<Integer>(Java)和Set<Int>(Kotlin)。
  • Java和Kotlin提供了丰富的API和方法来操作和处理集合。

4. 枚举enum

4.1 是什么?

枚举是一种特殊的数据类型,用于定义一组命名的常量值。在Dart中,枚举使用enum关键字来定义。

4.2 好处

  • 枚举提供了一种清晰明确的方式来定义一组相关的常量。
  • 枚举常量可以更好地描述代码中的意图,提高代码的可读性。

4.3 怎么用?

可以使用enum关键字定义枚举类型,并列出所有的枚举常量。

enum Weekday {
  monday,
  tuesday,
  wednesday,
  thursday,
  friday,
  saturday,
  sunday,
}

丰富的代码例子说明

enum Weekday {
  monday,
  tuesday,
  wednesday,
  thursday,
  friday,
  saturday,
  sunday,
}

Weekday today = Weekday.tuesday; // 声明一个枚举变量,并赋予一个枚举常量

if (today == Weekday.monday || today == Weekday.friday) {
  print('It's a workday!');
} else if (today == Weekday.saturday || today == Weekday.sunday) {
  print('It's a weekend!');
} else {
  print('It's a weekday!');
}

4.4 使用时需要注意什么?

  • 枚举常量是静态不可变的,不能在运行时修改。
  • 枚举常量在作用域内是唯一的,可以直接通过枚举类型和常量名称进行访问。

在开发中的使用场景

  • 枚举常用于定义一组相关的常量,如星期几、状态、选项等。
  • 枚举常量可以在代码中更好地描述和表示一组预定义的取值。

与Java和Kotlin相比:

  • 在Java和Kotlin中,枚举的声明和使用与Dart类似,分别为enum关键字(Java)和enum class关键字(Kotlin)。
  • Java和Kotlin提供了更多的枚举功能和方法,如枚举属性、方法等。

小结

  • 列表(List)有序的集合,允许重复元素。适用于需要按照顺序处理数据的场景,如存储用户评论、商品列表等。
  • 映射(Map)是键值对的集合,每个键对应一个值。适用于存储和查询具有唯一键的数据项,如用户信息、配置参数等。
  • 集合(Set)是无序且不重复的集合。适用于去重和快速判断元素是否存在的场景,如标签集合、分类集合等。
  • 枚举(enum)是一种用于定义一组命名的常量值的数据类型。适用于定义一组相关的常量,如星期几、状态、选项等。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容