Сортировать все уровни выражения - PullRequest
5 голосов
/ 09 февраля 2011

Какой хороший способ сортировки всех уровней выражения?Следующее делает то, что я хочу, когда выражение имеет прямоугольную структуру, но я бы хотел, чтобы оно работало и с непрямоугольными выражениями

Map[Sort, {expr}, Depth[expr] - 1]

Например, следующее должно вывести True

sorted = deepSort[{{{1, 3, 8}, {3, 7, 6}, {10, 4, 9}, {3, 8, 10, 
      6}, {8, 2, 5, 10}, {8, 5, 10, 
      9}}, {{{1, 3, 8}, {3, 8, 10, 6}}, {{3, 7, 6}, {3, 8, 10, 
       6}}, {{10, 4, 9}, {8, 5, 10, 9}}, {{3, 8, 10, 6}, {8, 2, 5, 
       10}}, {{8, 2, 5, 10}, {8, 5, 10, 9}}}}];
checkSortedLevel[k_] := Map[OrderedQ, sorted, {k}];
And @@ Flatten[checkSortedLevel /@ Range[0, 2]]

Ответы [ 2 ]

8 голосов
/ 09 февраля 2011

deepSort[expr_] := Map[Sort, expr, {0, -2}]

Обратите внимание, что это будет работать, даже если ваш expr содержит головы, отличные от List.

3 голосов
/ 16 февраля 2011

Если у вас есть выражение, содержащее заголовки, отличные от List, и вы не хотите сортировать их, это может быть полезно.

expr /. List :> Composition[Sort, List]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...