Дизайн класса
[FONT=Arial] Пусть есть объект Obj, над ним можно выполнить действие match, которое принимает в виде аргумента объект Pattern (т.е. метод выполняет соответствие объекта Obj шаблону Pattern). Результатом действия match является 3-х мерная структура, пусть к ней можно адресоваться через X, Y, Z. Каждый элемент с координатами x1, y1, z1 содержит ещё 3-х мерную структуру с адресацией X, Y, Z и т.д. Необходимо как-то грамотно продумать модель обращения к этим структурам. [/FONT]
[FONT=Arial]Например. arrayOfZ = Obj.match(Pattern).X[2].Y[1]; или [/FONT]
[FONT=Arial]arrayOfZ = Apply(Pattern).To(Obj).X[2].Y[1][/FONT]
[FONT=Arial]Но все эти варианты какие-то нечитабельные. Проблема заключается также в том, что необходимо предоставить максимальную гибкость в выборке. Например, из первого соответствия выбираем объекты, составляющая X которых равна 2, потом производим ещё раз выборку по X=3, т.е. у каждый объект первичной выборки (2, y1, z1) содержит объект с координатами (3, y2, z2). [/FONT]
[FONT=Arial]Думал взять вариант синтаксиса XPath, но он как-то коряво идёт под эту задачу.[/FONT]
Кроме того не обязательно писать все в одну строчку. Разбей на промежуточные действия:
matchResult = Obj.match(Pattern);
someName = matchResult.X[2];
arrayOfZ = someName.Y[1]
так даже лучше, т.к. интуитивно будет понятно, что мы получаем нааждом шаге