2014-09-29 70 views
2

在数学变量名,我试图操纵名单,这样我可以有像开始:保留在数学

myList = List[{a,b,c,d}]; 

a=12; 

b=15; 

c=7; 

d=9; 

然后我想能够重新排序与输出作为名单变量名称而不是数字。

+0

不应该使用一个[协会](http://reference.wolfram.com/language/ref/Association.html )? – APerson 2014-09-29 18:43:58

+0

您也可以使用规则“{a-> 12,b-> 15}”。 (关联在版本10中是新的方式) – agentp 2014-09-29 20:03:51

回答

1

正如@george在评论中所说的,最简单的方法之一就是使用转换规则来做你想要的 。它们允许用一个符号的值代替 符号,而不为该符号分配值。例如,在你的情况 (我已经错位的顺序,因为它是不是与此有关):

myValues = {d->9, a->12, b->15, c->7} 

转换规则有两个参数,你可以提取它们。因此,这是一种从转换规则列表中获取符号列表的方法。 Sort这里是按照字母顺序排列的符号。

myList = Sort[Map[First, myValues]] 

{a, b, c, d} 

为了得到值的列表,只需应用变换规则的符号 列表与/.操作

myList /. myValues 

{12, 15, 7, 9} 

现在我们知道该怎么做,我们就可以进行排序,根据符号到他们的数值

mySortedList = myList[[Ordering[ myList /. myValues]]] 

{c, d, a, b} 

排序给出了元素在列表中的位置,如果他们被排序。 这里我们使用数值列表并将其顺序应用到符号列表中。

,因为在数学没有OrderingBy命令,据我所知,您可以 也通过应用其内部订购这样为了通过给定函数的符号:

myList[[Ordering[Map[EulerPhi, myList /. myValues]]]] 

{a, c, d, b} 

我希望它适合你的应用程序。

Mathematica中经常会遇到的一件事是以变换规则的形式保存符号和值之间的关联并对其进行处理。

在你的情况下,可以采取以下形式:

SortBy[ myValues, Last] 

{c -> 7, d -> 9, a -> 12, b -> 15} 

SortBy[myValues, EulerPhi[Last[#]] &] 

{a -> 12, c -> 7, d -> 9, b -> 15} 

然后你可以选择提取你想要的。这就是图表信息被操纵的方式。

1
myList = HoldForm[{a, b, c, d}]; 

a = 12; 
b = 15; 
c = 7; 
d = 9; 

Last /@ Sort[{ReleaseHold[#], #} & /@ Thread[myList]] 

{C,d,A,B}