联想阵列GydF4y2Ba
关联阵列,也称为地图或词典,是一个GydF4y2Ba抽象数据类型GydF4y2Ba可以保存数据GydF4y2Ba(核心价值)GydF4y2Ba对。GydF4y2Ba
你可以把关联数组想象成电话号码的列表。在这个列表中,你可以通过查找电话号码来查找一个人的名字。名字是GydF4y2Ba价值GydF4y2Ba这个数字是GydF4y2Ba钥匙GydF4y2Ba.此列表看起来像下表:GydF4y2Ba
电话号码GydF4y2Ba | 姓名GydF4y2Ba |
1-203-456-4657GydF4y2Ba | John Doe.GydF4y2Ba |
1-964-725-5617GydF4y2Ba | 简史密斯GydF4y2Ba |
1-275-486-8562GydF4y2Ba | 丹尼尔布朗GydF4y2Ba |
1-347-374-3412GydF4y2Ba | John Doe.GydF4y2Ba |
关联阵列有两个重要的属性。每一个GydF4y2Ba钥匙GydF4y2Ba只能出现一次,就像每个电话号码一样,只能在目录中出现一次。而且,每一个GydF4y2Ba钥匙GydF4y2Ba只能有一个值,就像每个电话号码只能引用一个人。两个人可以在此列表中具有相同的名称,因此请记住给出的是很重要的GydF4y2Ba价值GydF4y2Ba可以在关联数组中出现多次。GydF4y2Ba
内容GydF4y2Ba
最小的必需功能GydF4y2Ba
关联阵列有四个基本操作。GydF4y2Ba
函数名*GydF4y2Ba 提供功能GydF4y2Ba 插入(键,值)GydF4y2Ba
添加A.GydF4y2Ba(核心价值)GydF4y2Ba对关联数组GydF4y2Ba 删除(键)GydF4y2Ba
去除那个GydF4y2Ba钥匙GydF4y2Ba在关联阵列中对GydF4y2Ba 更新(键,价值)GydF4y2Ba
分配/更新GydF4y2Ba价值GydF4y2Ba现有的GydF4y2Ba钥匙GydF4y2Ba 查找(键)GydF4y2Ba
返回GydF4y2Ba价值GydF4y2Ba分配到这一点GydF4y2Ba钥匙GydF4y2Ba *不需要确切的名称。实际上,可以通过特殊语法直接由给定的语言提供一些功能。GydF4y2Ba
使用列表示例Python实现GydF4y2Ba
在Python中,使用字典为您实现关联阵列。此原始数据类型是使用a实现的GydF4y2Ba哈希表GydF4y2Ba.此示例使用GydF4y2Ba数组GydF4y2Ba,值得注意的是,它是一个非常低效的实现。GydF4y2Ba
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 21 22 23 24GydF4y2Ba |
|
内置Python功能GydF4y2Ba
Python有自己的基本数据类型字典,字典实现了关联数组的功能。让我们看看它是如何工作的:GydF4y2Ba
Python字典GydF4y2Ba
1 2 3.GydF4y2Ba>>>GydF4y2Bamy_dict.GydF4y2Ba=GydF4y2Ba{}GydF4y2Ba>>>GydF4y2Ba一种GydF4y2Ba{}GydF4y2Ba
现在我们可以通过简单地使用特定的语法给键赋值来添加到这个字典中。让我们模拟前面的社会安全号码示例。GydF4y2Ba
1 2 3 4 5GydF4y2Ba>>>GydF4y2Ba一种GydF4y2Ba[GydF4y2BaOne hundred.GydF4y2Ba]GydF4y2Ba=GydF4y2Ba'泰勒'GydF4y2Ba>>>GydF4y2Ba一种GydF4y2Ba[GydF4y2Ba101GydF4y2Ba]GydF4y2Ba=GydF4y2Ba'约翰'GydF4y2Ba>>>GydF4y2Ba一种GydF4y2Ba[GydF4y2Ba102GydF4y2Ba]GydF4y2Ba=GydF4y2Ba'abby'GydF4y2Ba>>>GydF4y2Ba一种GydF4y2Ba{GydF4y2BaOne hundred.GydF4y2Ba:GydF4y2Ba'泰勒'GydF4y2Ba那GydF4y2Ba101GydF4y2Ba:GydF4y2Ba'约翰'GydF4y2Ba那GydF4y2Ba102GydF4y2Ba:GydF4y2Ba'abby'GydF4y2Ba}GydF4y2Ba
现在,我们被允许添加一个GydF4y2Ba不同的GydF4y2Ba泰勒的钥匙,因为这不会违反关联阵列的任何原则。GydF4y2Ba
1 2 3.GydF4y2Ba>>>GydF4y2Ba一种GydF4y2Ba[GydF4y2Ba103GydF4y2Ba]GydF4y2Ba=GydF4y2Ba'泰勒'GydF4y2Ba>>>GydF4y2Ba一种GydF4y2Ba{GydF4y2BaOne hundred.GydF4y2Ba:GydF4y2Ba'泰勒'GydF4y2Ba那GydF4y2Ba101GydF4y2Ba:GydF4y2Ba'约翰'GydF4y2Ba那GydF4y2Ba102GydF4y2Ba:GydF4y2Ba'abby'GydF4y2Ba那GydF4y2Ba103GydF4y2Ba:GydF4y2Ba'泰勒'GydF4y2Ba}GydF4y2Ba
在Python中,如果我们为已有字典中已有的键分配值,它将更新具有新值的键。GydF4y2Ba
1 2 3.GydF4y2Ba>>>GydF4y2Ba一种GydF4y2Ba[GydF4y2Ba101GydF4y2Ba]GydF4y2Ba=GydF4y2Ba'詹妮弗'GydF4y2Ba>>>GydF4y2Ba一种GydF4y2Ba{GydF4y2BaOne hundred.GydF4y2Ba:GydF4y2Ba'泰勒'GydF4y2Ba那GydF4y2Ba101GydF4y2Ba:GydF4y2Ba“Jeniffer”GydF4y2Ba那GydF4y2Ba102GydF4y2Ba:GydF4y2Ba'abby'GydF4y2Ba那GydF4y2Ba103GydF4y2Ba:GydF4y2Ba'泰勒'GydF4y2Ba}GydF4y2Ba
我们可以使用pop方法删除一个键GydF4y2Ba
1 2 3 4GydF4y2Ba>>>GydF4y2Ba一种GydF4y2Ba.GydF4y2Ba流行音乐GydF4y2Ba(GydF4y2Ba103GydF4y2Ba的)GydF4y2Ba'泰勒'GydF4y2Ba>>>GydF4y2Ba一种GydF4y2Ba{GydF4y2BaOne hundred.GydF4y2Ba:GydF4y2Ba'泰勒'GydF4y2Ba那GydF4y2Ba101GydF4y2Ba:GydF4y2Ba“Jeniffer”GydF4y2Ba那GydF4y2Ba102GydF4y2Ba:GydF4y2Ba'abby'GydF4y2Ba}GydF4y2Ba
最后,Python对字典具有一些很酷的内置方法。这是一些:GydF4y2Ba
1 2 3 4 5 6GydF4y2Ba>>>GydF4y2Ba一种GydF4y2Ba.GydF4y2Ba键GydF4y2Ba()GydF4y2Ba[GydF4y2BaOne hundred.GydF4y2Ba那GydF4y2Ba101GydF4y2Ba那GydF4y2Ba102GydF4y2Ba]GydF4y2Ba>>>GydF4y2Ba一种GydF4y2Ba.GydF4y2Ba值GydF4y2Ba()GydF4y2Ba[GydF4y2Ba'泰勒'GydF4y2Ba那GydF4y2Ba“Jeniffer”GydF4y2Ba那GydF4y2Ba'abby'GydF4y2Ba]GydF4y2Ba>>>GydF4y2BaLen.GydF4y2Ba(GydF4y2Ba一种GydF4y2Ba的)GydF4y2Ba3.GydF4y2Ba
示例问题GydF4y2Ba
想象一下,我们有一个电话号码列表和他们的所有者的名字。回答以下问题:GydF4y2Ba
- 'Jane Doe'给出了一个新的电话号码。不幸的是,此名称已存在于列表中。我们做什么?GydF4y2Ba
- “詹姆斯·布朗”扔掉了他的电话号码。我们可以用他的旧电话号码给下一个有电话的人吗?GydF4y2Ba
- 在这个场景中允许使用更新功能吗?GydF4y2Ba
- A1。可以将不同的电话号码映射到此名称。毕竟,在关联数组中允许多个相同值的实例。GydF4y2Ba
- A2。是的,这没关系,因为我们必须从列表中删除(键,值)对。GydF4y2Ba
- A3。当然,我们可以更新某人的电话号码,只要它没有被其他人使用。GydF4y2Ba
时间复杂性GydF4y2Ba
关联阵列的具体实施对其运行时具有大量影响。GydF4y2Ba
操作GydF4y2Ba | 数组GydF4y2Ba | 红黑树GydF4y2Ba | 哈希表GydF4y2Ba |
插入GydF4y2Ba | **GydF4y2Ba | ||
消除GydF4y2Ba | **GydF4y2Ba | ||
更新GydF4y2Ba | **GydF4y2Ba | ||
查找GydF4y2Ba | **GydF4y2Ba |
**取决于碰撞处理。GydF4y2Ba
使用GydF4y2Ba数组GydF4y2Ba,就像那个GydF4y2Ba以上GydF4y2Ba,是非常效率的。要执行任何操作,您需要在最坏的情况下遍历数组中的每对一体。因此,如果有的话,关联阵列很少使用数组实现。GydF4y2Ba
红黑树GydF4y2Ba比阵列更快。因为他们是GydF4y2Ba二叉搜索树GydF4y2Ba,他们可以通过中搜索GydF4y2Ba 时间。与数组相比,这使得每个操作都更快。GydF4y2Ba
哈希表GydF4y2Ba是关联阵列在计算机科学中如此受欢迎的原因。通过引入哈希函数,实施者可以保证相同的GydF4y2Ba钥匙GydF4y2Ba哈希会一样吗GydF4y2Ba价值GydF4y2Ba每次。然后,查找快速,因为您只需查看正确的单元格以找到GydF4y2Ba价值GydF4y2Ba.重要的是要注意碰撞可能发生在两个不同的GydF4y2Ba键GydF4y2Ba哈希到相同GydF4y2Ba价值GydF4y2Ba.有不同的方法来解决这些碰撞(这一切对运行时都有不同的影响),但碰撞通常是不可取的。GydF4y2Ba
关联阵列的应用GydF4y2Ba
关联阵列用于各种计算机科学领域。它们通常用于编程模式和范式,如GydF4y2Ba弥扑化GydF4y2Ba.该技术强调了存储和快速检索信息,以及GydF4y2Ba备忘录GydF4y2Ba通常使用哈希表来实现。GydF4y2Ba
所有对象GydF4y2Bajavascript.GydF4y2Ba实际上是关联数组。GydF4y2Ba杰森GydF4y2Ba是一个流行的Web通信标准,也是关联数组。最近,JSON在基于JavaScript的Web平台的崛起中获得了流行度,例如GydF4y2Banode.js.GydF4y2Ba.GydF4y2Ba
一个调用的整个类型的数据库GydF4y2BaNoSQL.GydF4y2Ba数据库基于关联数组。这些数据库使用关联数组进行存储GydF4y2Ba(核心价值)GydF4y2Ba对。这种类型的数据库专门用于GydF4y2Ba快速地GydF4y2Ba数据检索。就像哈希表一样。GydF4y2Ba