繁体   English   中英

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

[英]Associative Array : PHP/C vs Flex/Flash

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

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

但是在Flex中并没有完全有效的解释 我真的不记得C如何处理这个问题,但我更倾向于相信它像php一样工作,因为Array在内存中预先保留了空间,我们可以在内存中遍历。 我对吗?

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

谢谢。

没有C实现,您可以根据需要进行滚动,也可以从现有的实现中进行选择。 这样,给定的C实现可以是有序的或无序的。

至于为什么,原因是优势不同。 排序使您(显然足够)可以依赖该排序。 但是,当您不需要该命令时,这很浪费。

不同的人会认为订购的优势比不订购的优势更为重要。

最大的灵活性来自于不排序,就像您还具有某种有序结构(列表,链表,向量都可以)一样,则可以轻松地从中创建有序哈希图(不是最佳解决方案,但这很容易) ,因此您不能抱怨自己没有给您任何礼物)。 从设计的早期开始,这使其成为通用的明显选择。

另一方面,订购的缺点通常仅在性能方面,因此,它是旨在为新开发者提供相对较少种类的相对广泛支持的明显选择。

历史的前进有时使这些决策成为最佳决策,有时甚至使决策欠佳,这是开发人员无法真正计划的。

对于PHP数组:这些野兽是唯一的结构,并且有些复杂, 肯德尔·霍普金斯Kendall Hopkins)在斜杠响应中给出了概述(向下滚动至他的答案):

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

如前所述,在C / C ++中,核心层中没有“关联数组”。 它在STL中具有一个映射(有序),就像在新的标准库( hash_map,unordered_map )中一样,并且在某些实现中有一个gnu_hash_map(无序)(这是​​很好的恕我直言)。

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

回答您的问题:您对PHP和C / C ++关联数组的等效性的观点并不成立,在PHP中,它们做出了设计决策,目的是在单个接口下提供最大的舒适度(失败或成功,无论如何)。 在C / C ++中,有许多不同的实现方式(具有优点和缺点)。

问候

RBO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM