在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以这种方式工作的主要原因是什么。
谢谢。
答案 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