我一直在学习CS课程。
当我学习C时,我了解了哈希表。
哈希表是需要哈希函数将"键"映射到整数值的数组。该值将是数组中的索引。
"键" -> [哈希函数] ->值
数组[值] = "键"
现在,我正在学习PHP,我对关联数组的使用感到非常困惑。在PHP中,我们传入一个密钥(例如$_POST["key"]),它将为我们提供一个值。所以这里的"键"是数组的索引,不像 C 哈希表,它们的索引是哈希函数输出的值。
$_POST["键"] = 值
我做了很多搜索,并了解到哈希表和关联数组不是 100% 相同的,但我非常困惑为什么这两种不同的场景以不同的方式使用术语"键"和"值"。
我在这里看到什么问题吗?
key"和"value"的意思不是一回事。
键是你输入到哈希表或PHP关联数组中的东西,或者通常,"map"来获取值。
您遇到的困惑是,您在第一个示例中从哈希表中返回的值随后被用作不同事物(数组)的键(数组索引)。就像一个人既可以是父母又可以是孩子一样,数字(或其他任何东西)既可以是键(在一件事中)也可以是一个值(在另一件事中)。这是它的作用与你使用它的东西的关系的问题。
一般来说,"键"是用于从某种数据结构中唯一标识和检索某些"值"的一段数据。但是,当然,"价值"这个词也可以意味着许多其他东西。
例如,如果你的语言有像Python或JavaScript这样的内置哈希表,你可以说table[key] = value
来存储一些东西,value = table[key]
来检索它。如果要创建自己的哈希表,则可能首先必须计算键的哈希函数,然后根据哈希计算数组索引,然后将该值放在该索引处的数组中。编写者可能会将哈希函数的结果称为"哈希值",并且他可能会将数组索引称为数组"键",所以是的,它可能会令人困惑。
我倾向于说"关键"这个词在你的CS课程的第一次考试/陈述中使用错误:
哈希表是需要哈希函数将"键"映射到整数值的数组。该值将是数组中的索引。
该声明最好是:
哈希表是需要哈希函数将某种输入值映射到整数值(称为哈希值)的数组。哈希值将是数组中的索引。
输入值 -> [哈希函数] ->哈希值
此外,声明:
数组[值] = "键"
是错误的,因为哈希函数可以为多个输入值生成相同的哈希值。通常,array[value]
将生成哈希函数计算相同哈希值的所有输入值的列表。
关联数组是一种数组表示法,用于告诉机器从数据集(数组名称)中检索与唯一键(数组索引)关联的信息。在机器下面将执行一个算法来搜索/检索此信息。编程语言可以为程序员提供关联数组(符号)来帮助程序员编写程序。所以它只是一个数组符号,它不是数组索引,就像 C 中的哈希数组一样。