Я хочу использовать структуру, подобную HashTable. Есть ли аналогичная структура в Wolfram Mathematica?Существует ли структура HashTable в Wolfram Mathematica?
ответ
Обновление: В Mathematica версии 10 представлена структура данных Association
(tutorial).
Существует ряд возможностей. Простейшая возможность, которая работает хорошо, если вам не нужно добавлять или удалять ключи из вашей таблицы или изменять их связанные значения, заключается в построении списка правил с ключом в левой части и значением справа -hand side, и используйте на нем Dispatch
.
Если вам нужно изменить записи в таблице, вы можете использовать символ DownValues
символа в качестве хеш-таблицы. Это будет поддерживать все операции, которые обычно используются с хэш-таблицами. Вот самый простой способ сделать это:
(* Set some values in your table.*)
In[1]:= table[a] = foo; table[b] = bar; table[c] = baz;
(* Test whether some keys are present. *)
In[2]:= {ValueQ[table[a]], ValueQ[table[d]]}
Out[2]:= {True, False}
(* Get a list of all keys and values, as delayed rules. *)
In[3]:= DownValues[table]
Out[3]:= {HoldPattern[table[a]] :> foo, HoldPattern[table[b]] :> bar,
HoldPattern[table[c]] :> baz}
(* Remove a key from your table. *)
In[4]:= Unset[table[b]]; ValueQ[table[b]]
Out[4]:= False
Я бы сказал, что наиболее подобная структура вы можете получить изsparse arrays.
Я согласен с Pillsy, но смотри также этот ответ:
Она включает в себя удобную функцию для получения ключей хеш-таблицы.
Я сделал модуль Dictionary.m, который содержал:
DictHasKey = Function[
{
dict,
key
},
ValueQ[dict[key]]
]
DictAddKey = Function[
{
dict,
key,
value
},
If[
DictHasKey[dict,key],
Print["Warning, Dictionary already has key " <> ToString[key]]
];
dict[key] = value;
]
DictKeys = Function[
{
dict
},
res = {};
ForEach[DownValues[dict], Function[{dictKeyDescr},
res = Append[res, ((dictKeyDescr[[1]]) /. dict -> neverUsedSymbolWhatever)[[1, 1]]];
]];
res
]
DictValues = Function[
{
dict
},
res = {};
ForEach[DownValues[dict], Function[{dictKeyDescr},
res = Append[res, dictKeyDescr[[2]]];
]];
res
]
DictKeyValuePairs = Function[
{
dict
},
res = {};
ForEach[DownValues[dict], Function[{dictKeyDescr},
res = Append[res, {((dictKeyDescr[[1]]) /. dict -> neverUsedSymbolWhatever)[[1, 1]], dictKeyDescr[[2]]}];
]];
res
]
ForEach = Function[
{
list,
func
},
len = Length[list];
For[i = 1, i <= len, i++,
func[
list[[i]]
];
];
]
забыл: ForEach = Function [ { список, Func }, LEN = длина [список]; Для [i = 1, i <= len, i ++, func [list [[i]]]; ]; ] – Fiard
вы можете отредактировать свой ответ, чтобы включить это. –
Mathematica 10 представляет Ассоциацию, <| k -> v |>
,
<|a -> x, b -> y, c -> z|>
%[b]
y
который в основном обертка для списка правил: Преобразовать перечень правил для ассоциации:
Association[{a -> x, b -> y, c -> z}]
<|a -> x, b -> y, c -> z|>
Преобразование ассоциации в список правил:
Normal[<|a -> x, b -> y, c -> z|>]
{a -> x, b -> y, c -> z}
- 1. ReleaseHoldAll в Wolfram Mathematica?
- 2. Назначения в Wolfram Mathematica
- 3. Combinator Reduction Wolfram Mathematica
- 4. Wolfram Mathematica NDSolve ошибка
- 5. Решить метод в Wolfram Mathematica
- 6. Wolfram Mathematica решение конкретного уравнения
- 7. Wolfram Mathematica Return [] странный результат?
- 8. Раскрашивание краев на графике в Wolfram Mathematica
- 9. Как найти обратную функцию в Wolfram Mathematica?
- 10. Как пропустить предупреждения в цикле [wolfram-mathematica]
- 11. Sum [] и Sequence [] в Wolfram Mathematica
- 12. Переходящий список как аргумент в wolfram mathematica
- 13. Wolfram Mathematica. 2 графика в одной плоскости
- 14. Найдите область двух функций в wolfram mathematica
- 15. Невозможно создать график в Wolfram Mathematica 8
- 16. Как вычислить эту интеграцию в wolfram mathematica
- 17. Wolfram Mathematica, входящие в дифференциальные уравнения
- 18. Проверьте, существует ли структура? [C]
- 19. Справочная система Wolfram Workbench и Mathematica
- 20. Список переменных, используемых функцией Wolfram Mathematica
- 21. Wolfram Mathematica импортирует данные из нескольких файлов
- 22. Wolfram Mathematica 9.0 Создать вертикальный стол
- 23. граф пункт проверяется на Checkboxbar Wolfram Mathematica
- 24. Wolfram Mathematica - «For» Loop and Pure Function
- 25. Точка пересечения между двумя линиями, Wolfram Mathematica
- 26. Поиск i-й строки в матрице в wolfram mathematica
- 27. Пакет Neural Networks в Wolfram Mathematica не параллелен?
- 28. Преобразование формулы excel в wolfram mathematica с использованием регулярного выражения
- 29. Решение нелинейной системы дифференциальных уравнений в wolfram mathematica
- 30. Тема: tdlen: Объекты ошибки неравной длины в wolfram mathematica
Этот ответ заслуживает еще нескольких голосов. По моему скромному мнению, почти всегда лучше использовать готовые структуры, чем строить свои собственные. Но «Пиллси» также дал очень хороший ответ. – Shredderroy