Wolfram mathematica 通过对mathematica中其他部分的更改进行排序

Wolfram mathematica 通过对mathematica中其他部分的更改进行排序,wolfram-mathematica,list-manipulation,Wolfram Mathematica,List Manipulation,我只是想知道: 给定一个列表{{{3,1,2},{4,2,5},{{7,1},{2,4}}},我想对第一个组件进行排序,然后让第二个组件像第一个组件一样进行更改。期望的结果是{{{1,2,3},{2,5,4},{{1,7},{4,2}}} 我该怎么做?非常感谢您的帮助。这是确保一行的工作保障=) 这可能会更清楚地说明发生了什么: sorter[{a_, b_}] := Module[{order = Ordering[a]}, {a[[order]], b[[order]]} ] I

我只是想知道:

给定一个列表
{{{3,1,2},{4,2,5},{{7,1},{2,4}}}
,我想对第一个组件进行排序,然后让第二个组件像第一个组件一样进行更改。期望的结果是
{{{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}}}
我建议:

#[[ All, Ordering@#[[1]] ]] & /@ list

这比Michael的短,效率几乎是他的两倍

micSort = {#[[Ordering[#]]], #2[[Ordering[#]]]} & @@@ # &;

wizSort = #[[All, Ordering@#[[1]]]] & /@ # &;

a = RandomInteger[100, {2400, 2, 15}];

micSort@a === wizSort@a
First@Timing@Do[#@a, {25}] & /@ {micSort, wizSort}

Out[1]= True

Out[2]= {0.453, 0.282}

我喜欢排序,这是一个非常有用的函数。但有时这是个脑筋急转弯。你知道
ListOfNumbers//Ordering//Ordering
做什么吗?它给出了一种排列,如果应用于排序后的ListOfNumbers,将返回原始列表。@Sasha是的,描述它的方式很无聊;-)然而,有更有用的方法来看待结果。有什么想法吗?@Sjoerd C.de Vries。它给出列表中元素的排名。这一点已经讨论过了。正如Andrzej Kozlowski所指出的(Sort@mylist)[[Ordering@Ordering@mylist]]==mylist(请参阅)。您可能对dreeves()的这个问题感兴趣()@TomD我在开始时就知道这个线程(在我的玩家标签下)…;-)
micSort = {#[[Ordering[#]]], #2[[Ordering[#]]]} & @@@ # &;

wizSort = #[[All, Ordering@#[[1]]]] & /@ # &;

a = RandomInteger[100, {2400, 2, 15}];

micSort@a === wizSort@a
First@Timing@Do[#@a, {25}] & /@ {micSort, wizSort}

Out[1]= True

Out[2]= {0.453, 0.282}