2011-02-08 90 views
5

排序表達式的所有級別的好方法是什麼?下面我想要做什麼的時候表達具有矩形結構,但我想它對於非矩形表現以及工作排序所有級別的表達式

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

例如,下面應打印真實

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]] 

回答

8

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

請注意,即使您的expr包含List以外的頭,也可以使用。

3

如果您有一個表達式包含List以外的頭,並且您不想對這些表達式排序,這可能會有用。

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

給自己的注意事項:_Don't修復什麼沒有壞掉! – 2011-05-06 14:58:28