【问题标题】:Are the "key" and "value" terms for hash tables and associative arrays used interchangeably?哈希表和关联数组的“键”和“值”术语是否可以互换使用?
【发布时间】:2015-08-27 10:17:52
【问题描述】:

我一直在关注 CS 课程简介。

当我学习 C 时,我学习了哈希表。

哈希表是需要哈希函数将“键”映射到整数值的数组。 该值将是数组中的索引。

“键” -> [哈希函数] -> 值

数组[值] = "键"

现在,我正在学习 PHP,但我对关联数组的使用感到非常困惑。在 PHP 中,我们传入一个键(例如 $_POST["key"] ,它会为我们提供一个值。所以这里的“键”是数组的索引,不像 C 哈希表,它们的索引是值由哈希函数输出。

$_POST["key"] = 值

我做了很多搜索,了解到哈希表和关联数组不是 100% 相同的,但我很困惑为什么这两种不同的场景在不同的地方使用术语“键”和“值”方式。

我这里有什么问题吗?

【问题讨论】:

  • 语言不一样,意思也不一样。像英语中的舞台并不意味着与法语中的舞台相同。 (英语戏剧相关,法语学习相关)。
  • 哈希表只是实现关联数组的一种可能方式(例如,它们也可以用树来实现)。

标签: php c arrays hashtable associative


【解决方案1】:

我倾向于说在你的 CS 课程的第一个例子/陈述中使用了错误的“key”这个词:

哈希表是需要哈希函数将“键”映射到整数值的数组。该值将是数组中的索引。

陈述最好是:

哈希表是需要哈希函数将某种输入值映射为整数值的数组,称为哈希值。哈希值将是数组中的索引。

输入值 -> [哈希函数] -> 哈希值

进一步,声明:

数组[值] = "键"

是错误的,因为散列函数可以为多个输入值生成相同的散列值。一般来说,array[value] 会生成一个列表,其中包含哈希函数计算相同哈希值的所有输入值。

关联数组是一种数组表示法,它告诉机器从数据集(数组名称)中检索与唯一键(数组索引)相关的信息。机器下方将执行算法来搜索/检索此信息。一种编程语言可以为程序员提供关联数组(符号)来帮助程序员编写他的程序。所以它只是一个数组表示法,而不是数组indexing,就像C中的hash数组一样。

【讨论】:

    【解决方案2】:

    一般来说,“键”是用于从某种数据结构中唯一标识和检索某些“值”的一些数据。但当然,“价值”这个词也可以表示许多其他的东西。

    例如,如果您的语言具有内置的哈希表(如 Python 或 JavaScript),您可以只说 table[key] = value 来存储某些内容,并说 value = table[key] 来检索它。如果您正在制作自己的哈希表,您可能首先必须计算键的哈希函数,然后从哈希计算数组索引,然后将值放入该索引处的数组中。作者可能将哈希函数的结果称为“哈希值”,而他可能将数组索引称为数组“键”,所以是的,这可能会让人感到困惑。

    【讨论】:

      【解决方案3】:

      “key”和“value”不是同一个意思。

      key 是您输入哈希表或 PHP 关联数组的东西,或者一般来说,“映射”以获取

      您遇到的困惑是,您在第一个示例中从哈希表返回的 value 被用作 key(数组索引) 到一个 不同的 事物(数组)。就像一个人既可以是父母又可以是孩子一样,一个数字(或其他)既可以是键(在一件事上),也可以是一个值(在另一件事上)。这取决于它的角色与你使用它的东西的关系。

      【讨论】:

      猜你喜欢
      • 2014-07-23
      • 2010-11-29
      • 2013-05-25
      • 2015-06-07
      • 2011-03-09
      • 2014-01-31
      • 2011-12-15
      • 2018-04-14
      • 2015-11-12
      相关资源
      最近更新 更多