Как сказал @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}
Затем вы можете выбрать, чтобы извлечь то, что вы хотите. Вот как манипулирует информация о графе.
Вы не должны использовать [ассоциацию] (http://reference.wolfram.com/language/ref/Association.html)? – APerson
Вы также можете работать с правилами '{a-> 12, b-> 15}'. (кстати, новая ассоциация в версии 10) – agentp