2011-03-09 25 views
4

改變另一部分,我只是想知道排序:給定一個列表{{{3,1,2},{4,2,5}},{{7,1},{2,4}}}與數學

,我想第一個組件進行排序,然後讓第二組分變化的第一個廣告。期望的結果是{{{1,2,3},{2,5,4}},{{1,7},{4,2}}}

我該怎麼做?非常感謝您的幫助。

+0

感謝您的接受。 :-) – 2011-04-14 08:01:18

回答

10

這裏的作業安全,確保一個班輪=)

In[16]:= list={{{3,1,2},{4,2,5}},{{7,1},{2,4}}}; 

In[17]:= {#[[Ordering[#]]],#2[[Ordering[#]]]}& @@@ list 
Out[17]= {{{1,2,3},{2,5,4}},{{1,7},{4,2}}} 

發生了什麼,這可能是一個更加清楚一點爲:

sorter[{a_, b_}] := 
Module[{order = Ordering[a]}, 
    {a[[order]], b[[order]]} 
    ] 

In[19]:= sorter /@ list 

Out[19]= {{{1, 2, 3}, {2, 5, 4}}, {{1, 7}, {4, 2}}} 
+0

我喜歡'Ordering',這是一個非常有用的功能。但有時候這是一個腦筋急轉彎。你知道'ListOfNumbers // Ordering // Ordering'是什麼嗎? – 2011-03-09 11:00:13

+1

它給出了排列,如果應用於排序的ListOfNumber,將返回原始列表。 – Sasha 2011-03-09 13:42:13

+1

@Sasha是的,這是無聊的方式來形容它;-)然而,有更多有用的方式來看結果。任何想法? – 2011-03-09 15:39:13