Wie würde ich idiomatisch eine Zeichenkette erstellen, um hashmap im Rost zu stringieren. Das Folgende funktioniert, aber ist es der richtige Weg? Gibt es eine andere Art von String, den ich verwenden sollte?
%Vor% Angenommen, Sie möchten die Flexibilität von String
, HashMap<String, String>
ist richtig. Die andere Wahl ist &str
, aber das bedeutet erhebliche Einschränkungen für die Verwendung von HashMap
/ wo es weitergegeben werden kann; aber wenn es funktioniert, ist es effizienter, einen oder beide Parameter in &str
zu ändern. Diese Auswahl sollte von der Art der benötigten Besitz-Semantik diktiert werden und wie dynamisch die Zeichenfolgen sind, siehe diese Antwort und < a href="http://doc.rust-lang.org/master/guide-strings.html"> die Zeichenfolgen für mehr.
Übrigens kann die Suche nach HashMap<String, ...>
mit String
teuer sein: Wenn Sie noch keine haben, müssen Sie eine neue String
zuweisen. Wir haben eine Arbeit in Form von find_equiv
, mit dem Sie ein String-Literal (und allgemeiner% &str
) übergeben können, ohne ein neues String
zuzuordnen:
laufstall (Ich habe den Option
im Rückgabewert belassen, man könnte .unwrap()
aufrufen oder einen fehlenden Schlüssel richtig behandeln).
Eine andere etwas andere Option (in einigen Fällen allgemeiner, in anderen weniger) ist die std::string::as_string
Funktion, die es ermöglicht, die Daten in &str
so anzuzeigen, als wäre es ein &String
, ohne zuzuordnen (als Der Name suggeriert ). Sie gibt ein Objekt zurück, das auf eine String
dereferenziert werden kann, z. B.
(Es gibt eine ähnliche std::vec::as_vec
.)
Tags und Links rust