排序所有级别的表达式

时间:2011-02-08 22:13:19

标签: wolfram-mathematica

对表达式的所有级别进行排序有什么好方法?当表达式具有矩形结构时,以下是我想要的,但是我希望它也适用于非矩形表达式

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 个答案:

答案 0 :(得分:8)

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

请注意,即使您的expr包含List以外的其他头,这也会有效。

答案 1 :(得分:3)

如果你的表达式包含除List以外的头,并且你不想对它们进行排序,那么这可能很有用。

expr /. List :> Composition[Sort, List]