Ich möchte eine Struktur wie HashTable verwenden. Gibt es eine ähnliche Struktur in Wolfram Mathematica?Gibt es HashTable-Struktur in Wolfram Mathematica?
Antwort
Aktualisierung: Mathematica Version 10 eingeführt die Association
Datenstruktur (tutorial).
Es gibt eine Reihe von Möglichkeiten. Die einfachste Möglichkeit, die gut funktioniert, wenn Sie keine Schlüssel aus Ihrer Tabelle hinzufügen oder löschen müssen, oder die zugehörigen Werte ändern, besteht darin, eine Liste von Regeln mit dem Schlüssel auf der linken Seite und dem Wert auf der rechten Seite zu erstellen -hand Seite, und verwenden Sie Dispatch
darauf. Wenn Sie die Einträge in Ihrer Tabelle ändern müssen, können Sie das DownValues
eines Symbols als Hash-Tabelle verwenden. Dies unterstützt alle Operationen, die üblicherweise mit Hash-Tabellen verwendet werden. Hier ist der direkteste Weg, dies zu tun:
(* 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
Ich würde sagen, die ähnlichste Struktur, die Sie erhalten können aus der Box sind sparse arrays.
ich mit Pillsy zustimmen, aber auch diese Antwort:
Es enthält eine praktische Funktion für den Schlüssel einer Hash-Tabelle zu bekommen.
I Dictionary.m Modul gemacht haben, die enthalten:
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]]
];
];
]
vergessen: FürJeden = Funktion [ { Liste, func }, len = Länge [Liste]; Für [i = 1, i <= len, i ++, func [Liste [[i]]]; ]; ] – Fiard
können Sie Ihre Antwort so bearbeiten, dass sie diese enthält. –
Mathematica 10 führt Association, <| k -> v |>
,
<|a -> x, b -> y, c -> z|>
%[b]
y
die im Grunde ein Wrapper für eine Liste von Regeln ist: Convert eine Liste von Regeln für eine Zuordnung:
Association[{a -> x, b -> y, c -> z}]
<|a -> x, b -> y, c -> z|>
Konvertieren einer Assoziation in eine Liste von Regeln:
Normal[<|a -> x, b -> y, c -> z|>]
{a -> x, b -> y, c -> z}
- 1. Wolfram Workbench und Mathematica Hilfesystem
- 2. Möglichkeit zum Umgang mit großen Dateien in Wolfram Mathematica
- 3. Lösen von nichtlinearen System von Differentialgleichungen in Wolfram Mathematica
- 4. Konvertieren von Excel-Formel zu Wolfram Mathematica mit Regex
- 5. Was bietet Wolfram Mathematica 7 für CS/CEN-Studenten?
- 6. Gibt es Mathematica-Pakete zum Präsentieren von Ableitungen?
- 7. Seltsam Sin [x] Graph in Mathematica
- 8. Wie funktioniert Wolfram Alpha?
- 9. Mathematica Solve-Funktion gibt falsche Lösung, warum?
- 10. Ändern Wolfram Installationsverzeichnis in Continuent-Tools-Hadoop
- 11. Gezielte Vereinfachen in Mathematica
- 12. Math.cos() gibt falsches Ergebnis
- 13. Mathematica auswerten
- 14. Sprintf entspricht in Mathematica?
- 15. Ausbeute in Mathematica
- 16. Wie konvertiere ich die Mathematica-Syntax in Latex?
- 17. In Mathematica, was bedeutet @@@?
- 18. Verbindungspunkte in Mathematica
- 19. Was bedeutet # in Mathematica?
- 20. Herausfiltern Unterliste in Mathematica
- 21. "Irgendwelche auswählen" in Mathematica
- 22. Zeichnungslegenden in Mathematica
- 23. Einstellen von Umgebungsvariablen in Mathematica
- 24. neuer Graph in Mathematica 8.0
- 25. Umformen von Matrizen in Mathematica
- 26. Verschiedene Eigenvektoren von Wolfram, Octave, Jama
- 27. Zwei seltsame Effizienzprobleme in Mathematica
- 28. Anpassen von Mathematica-Shortcuts
- 29. Optional benannte Argumente in Mathematica
- 30. Was ist das Äquivalent von Fold in ClojureScript von Wolfram Language?
Diese Antwort verdient mehrere Stimmen mehr. Meiner bescheidenen Meinung nach ist es fast immer besser, Out-of-the-Box-Strukturen zu verwenden als eigene zu konstruieren. Aber 'Pillsy' hat auch eine sehr gute Antwort gegeben. – Shredderroy