我目前正在尝试学习Symfony,其中很大一部分是教义。我一直在阅读《 Doctrine》的官方文档,在有关Collections library的部分中,我偶然发现了称为“有序地图”的东西。我试图在Google上进行搜索,但找不到任何令人满意的答案。只是针对特定语言(大多数是Java和C ++)的答案,但我想大致理解它。它是如何工作的以及它是什么,因为在Doctrine文档中,他们正在将其与ArrayCollection进行比较,因此我希望,如果我能够理解它的含义,那么对我来说也将更容易理解ArrayCollection。
[我试图搜索“什么是有序图”或“有序图解释”之类的东西,但是正如我之前所说,我没有找到想要的东西。
映射有时称为有序”。
例如,PHP中的数组是ordered(保留插入顺序)。因此创建/修改这样的数组:
$array = [2 => 'a', 1 => 'b'];
$array[0] = 'c';
确实会导致数组[2 => 'a', 1 => 'b', 0 => 'c']
-保留插入顺序-而在其他一些语言中,它将变成[0 => 'c', 1 => 'b', 2 => 'a']
。
这会影响一些操作。用foreach
遍历数组将返回插入顺序的条目。您可以对php数组进行键式或值式排序,默认排序函数sort
将drop原始键并以数字方式重新索引。使用数字键进行序列化和反序列化可能会产生意想不到的后果。还有一些其他效果有时是有益的,有时是令人惊讶或烦人的(或两者都有)。
在学说的上下文中(因为它是用php编写的,这意味着,可以将值作为实体对象的集合以任何想要的方式排序(当然包括id),并且如果您遍历该集合,则可以按照实体按教义添加的顺序获取实体对象(sql / dql查询的顺序)。 Doctrine还允许将键设置为实体的ID,同时仍保留sql / dql查询顺序。由于doctrine的Collection实现PHP的ArrayAccess
,因此可以简化代码。
作为一个反例,地图也可以是无序的或排序的,其中第一种表示当您检索对时,顺序可以是随机的(在golang中,过去遍历地图时起始索引是随机的,不知道是否还是这样)或自动排序(例如Java中的SortedMap
)。