2011-02-08 29 views
5

Cách tốt nhất để sắp xếp tất cả các cấp của một biểu thức là gì? Sau đây làm những gì tôi muốn khi biểu có cấu trúc hình chữ nhật, nhưng tôi muốn nó hoạt động cho các biểu thức không phải hình chữ nhật cũngSắp xếp tất cả các cấp độ biểu hiện

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

Ví dụ, sau đây nên in Đúng

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

Trả lời

8

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

Lưu ý rằng thao tác này sẽ hoạt động ngay cả khi expr của bạn chứa người đứng đầu không phải Danh sách.

3

Nếu bạn có một biểu thức có chứa các đầu khác ngoài Danh sách và bạn không muốn sắp xếp những cụm từ đó, điều này có thể hữu ích.

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

Lưu ý tự: _Không khắc phục những gì không bị hỏng! _ –

Các vấn đề liên quan