2011-03-09 24 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