关联数组:PHP / C与Flex / Flash

时间:2010-08-11 11:12:58

标签: php flex arrays associative-array

在PHP中,关联数组保持其顺序。

// this will keep its order in PHP
a['kiwis']
a['bananas']
a['potatoes']
a['peaches']

However in Flex it doesn't with a perfectly valid explanation。我真的不记得C是如何处理这个问题的,但我更倾向于认为它像php一样工作,因为Array在内存中预先保留了它的空间,我们可以走内存。我是对的吗?

这里真正的问题是为什么。为什么C / PHP对此的解释因Flash / Flex而异,以及Adobe使Flash以这种方式工作的主要原因是什么。

谢谢。

2 个答案:

答案 0 :(得分:2)

没有C实现,您可以根据需要自行滚动,也可以从预先存在的实现中进行选择。因此,给定的C实现可以是有序的或无序的。

至于为什么,原因是优点不同。 Ordered允许您(显然足够)依赖于该排序。但是,当您不需要订购时,这是浪费。

与不订购的优势相比,不同的人会考虑订购的优势或多或少重要。

最大的灵活性来自于没有排序,好像你也有某种有序的结构(列表,链表,矢量都会这样做)然后你可以轻松地创建一个有序的hashmap(不是最佳解决方案,但是它很容易,所以你不能抱怨你没有给你一个)。从设计的早期开始,这使得它成为一种明显的选择,是通用的。

另一方面,排序的缺点通常只是在性能方面,所以它是一个明显的选择,旨在为新开发人员学习提供相对广泛的支持和少量类型。

历史的进程有时会使这些决策变得最佳,有时甚至是次优的,这是开发人员无法真正计划的。

答案 1 :(得分:1)

对于PHP数组:这些野兽是独特的结构,并且有些复杂,在Kendall Hopkins的斜线响应中给出了概述(向下滚动到他的答案):

  

Ken :PHP数组是一个链式哈希表(在关键冲突中查找O(c)和O(n))   允许使用int和string键。它使用2种不同的散列算法   将两种类型放入相同的散列键空间。还存储了每个值   哈希链接到它之前存储的值和之后存储的值   (链表)。它还有一个临时指针,用于保存   当前项,因此可以迭代哈希。

在C / C ++中,如前所述,核心语言中没有“关联数组”。它在STL中有一个map(有序),就像在新标准库(hash_map, unordered_map中)一样,并且在某些实现上有一个gnu_hash_map(无序)(非常好的imho)。

此外,“有序”C / C ++映射中元素的“顺序”通常“插入顺序”(如在PHP中),它是“键排序顺序“或”字符串哈希值排序顺序“。

回答你的问题:你对PHP和C / C ++关联数组的等价性的观点并不成立,在PHP中,他们做出了一个设计决策,以便在单个界面下提供最大的舒适度(无论是失败还是成功,等等) 。在C / C ++中,有许多不同的实现(具有优势和权衡)。

此致

RBO