2014-09-29 3 views
2

в Mathematica, я пытаюсь манипулировать список таким образом, что я могу начать что-то вроде:Сохранение имен переменных в системе Mathematica

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

a=12; 

b=15; 

c=7; 

d=9; 

Я тогда хотел, чтобы иметь возможность изменить порядок списка с выходной быть вместо имен вместо имен.

+0

Вы не должны использовать [ассоциацию] (http://reference.wolfram.com/language/ref/Association.html)? – APerson

+0

Вы также можете работать с правилами '{a-> 12, b-> 15}'. (кстати, новая ассоциация в версии 10) – agentp

ответ

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 команды в Mathematica, насколько я знаю, вы можете также заказать символы от данной функции, применяя его в заказе таким образом:

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}