Ich möchte ein HashSet<u8>
von einem Vec<u8>
erstellen. Ich würde das gerne machen
2n
Speicher, aber das einzige, was ich kompilieren kann, ist dieses Stück .. Junk, das ich denke, kopiert die Daten zweimal und verwendet 3n
Speicher.
Ich hatte gehofft, etwas Einfaches zu schreiben, so:
%Vor%aber das wird nicht kompiliert:
%Vor%.. und ich verstehe die Fehlermeldung nicht wirklich, wahrscheinlich weil ich RTFM brauche.
Eine andere Alternative:
Da die Operation den Vektor¹ nicht konsumieren muß, sollte sie nicht verbrauchen . Das führt nur zu einem zusätzlichen Kopieren an anderer Stelle im Programm:
%Vor% Nenne es wie hashset(&v)
wobei v
eine Vec<u8>
oder eine andere Sache ist, die zu einem Slice führt.
Es gibt natürlich mehr Möglichkeiten, dies zu schreiben, generisch zu sein und all das, aber diese Antwort bleibt dabei, nur das einzuführen, worauf ich mich konzentrieren wollte.
¹Dies basiert darauf, dass der Elementtyp u8
Copy
ist, d. h. er besitzt keine Besitz-Semantik.
Folgendes sollte gut funktionieren; Es erfüllt Ihre Anforderungen:
%Vor% from_iter()
funktioniert bei Typen, die IntoIterator
implementieren, also ein Vec
Argument ist ausreichend.
Zusätzliche Anmerkungen:
Sie müssen nicht explizit return
function results angeben; Sie müssen nur das Semikolon im letzten Ausdruck in seinem Körper weglassen
Ich bin mir nicht sicher, welche Version von Rust Sie verwenden, aber auf der aktuellen stable (1.12) to_iter()
existiert nicht