Валиков Алексей Н.
Шрифт:
нужно было получить документ вида.
Легко понять, почему такая задача называется задачей группировки: требуется сгруппировать элементы
Напомним вкратце решение, которое было тогда предложено. При обработке первого объекта каждой группы мы создавали элемент
которое возвращало непустое множество только тогда, когда элемент не был первым в группе.
В этом разделе мы приведем гораздо более эффективное и остроумное решение задачи группировки, впервые предложенное Стивом Мюнхом (Steve Muench), техническим гуру из Oracle Corporation. Оно основывается на двух посылках.
□ Мы можем выбрать множество узлов по их свойствам при помощи ключей.
□ Мы можем установить, является ли узел первым узлом множества в порядке просмотра документа при помощи функции
С первым пунктом все, пожалуй, ясно — выбор множества узлов по определенному критерию — это самое прямое предназначение ключей. Второй же пункт оставляет легкое недоумение: функция
Для того чтобы развеять все сомнения, напомним, как ведет себя эта функция, если аргументом является множество узлов. В этом случае
С учетом приведенных выше возможностей группирующее преобразование переписывается удивительно элегантным образом.
Результат выполнения этого преобразования уже был приведен в листинге 11.2.
Перечисление узлов
Функции