Как бы вы объяснили упорядоченную карту в целом? - PullRequest
0 голосов
/ 14 апреля 2020

Я сейчас пытаюсь выучить Symfony, и большая его часть - Doctrine. Я читал официальную документацию для Doctrine и в части о Библиотеке коллекций Я наткнулся на то, что называется "упорядоченная карта". Я пытался найти его в Google, но я не смог найти удовлетворительного ответа. Были только ответы для конкретных c языков (в основном Java и C ++), но я хочу понять это в целом. Как это работает и что это такое, потому что в документации Doctrine они сравнивают это с ArrayCollection, поэтому я надеюсь, что если я пойму, что это такое, мне будет легче понять и ArrayCollection.

Я пытался искать такие вещи, как «что такое упорядоченная карта» или «объясненная упорядоченная карта», но, как я уже говорил ранее, я не нашел того, что искал.

1 Ответ

1 голос
/ 14 апреля 2020

Карта иногда называется упорядоченной , когда записи остаются в той же последовательности, в которой они были вставлены.

Например, массивы в PHP упорядочены (сохранить порядок вставки). Таким образом, создание / изменение массива следующим образом:

$array = [2 => 'a', 1 => 'b'];
$array[0] = 'c';

действительно приведет к массиву PHP [2 => 'a', 1 => 'b', 0 => 'c'] - он сохранит порядок вставки - в то время как в некоторых других языках он будет превращен в [0 => 'c', 1 => 'b', 2 => 'a'] .

Это влияет на несколько операций. Итерация по массиву с foreach вернет записи в порядке вставки. Вы можете выполнять сортировку по ключам или по значениям для массивов PHP, функция сортировки по умолчанию sort будет отбрасывать исходные ключи и переиндексировать численно. Сериализация и десериализация с помощью числовых ключей c могут иметь непредвиденные последствия. И некоторые другие эффекты, которые иногда полезны, а иногда удивляют или раздражают (или оба). Вы можете прочитать его в массиве PHP do c page и страницах функций массива.

В контексте Doctrine (поскольку он записан в PHP) это означает, что коллекция, в которой значения являются объектами сущностей, может быть отсортирована любым способом, который вы хотите (включая, конечно, id), и если вы выполните итерацию по этой коллекции, вы получите объекты сущностей в порядке, в котором они были добавлены doctrine (порядок запроса SQL / DQL). Doctrine также позволяет устанавливать ключи для идентификаторов сущностей, сохраняя при этом порядок запросов SQL / DQL. Это может упростить код, поскольку Doctrine Collection реализует PHP ArrayAccess.

В качестве контрпримера карты также могут быть неупорядоченными или отсортированными, где первое означает, что при извлечении пар порядок может быть случайным (в golang начальный индекс был случайным при итерации по картам , не знаю, если это все еще верно) или автоматически сортируется (как SortedMap в Java).

...