как проверить порядок элементов в списке или массиве - PullRequest
0 голосов
/ 28 апреля 2011

ETA: Я думаю, что мой вопрос нуждается в уточнении. Я не хочу сортировать свои массивы. Я хочу быть уверен, что данный массив, который находится в порядке по определенному критерию, также в порядке по другому критерию. Я сделал графику для иллюстрации. Каждая строка представляет собой массив, упорядоченный по номеру. Если буквы также в порядке, массив проходит тест.

enter image description here


Оригинальный вопрос

У меня есть родительский класс PhysicalCount с 2 свойствами: date, count. У меня также есть подклассы PhysicalCount: ClutchCount, FryCount и MatCount. Когда у меня есть смешанный массив PhysicalCounts и подклассов, мне нужно проверить (не установлен!), Что порядок соответствует следующим критериям:

  1. объекты в порядке по date
  2. От 0 до 1 объектов каждого дочернего класса могут существовать
  3. 0 для многих объектов PhysicalCount может существовать
  4. если присутствует ClutchCount, он должен иметь более раннюю дату, чем FryCount или MatCount, если таковые существуют
  5. если присутствует FryCount, он должен иметь более раннюю дату, чем MatCount, если он существует

Скинул, вопрос что-то вроде:

Учитывая список, отсортированный по одному критерию ($o->date в моем случае), каков наиболее эффективный способ установить, что сортировка этого же списка по другому критерию (get_class($o) в моем случае) приведет к тому же порядку?

Я бы предпочел решение на PHP, но я думаю, что это довольно распространенная проблема, у которой есть стандартное решение, имя которого я просто не знаю. (Здесь я сожалею о своем выборе степени [не CS]).

1 Ответ

1 голос
/ 28 апреля 2011

Исходя из нашего обсуждения в комментариях, вам нужен вид, который является несколько "стабильным" (хотя на самом деле это не стабильная сортировка по определению), используйте usort для сортировки объектов в массиве в пользовательский способ. Вы можете указать в $cmp_function критерии, которые вы указали в своем вопросе, чтобы отсортированный массив соответствовал вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...