Beste Weg, um zu verketten Vektoren in Rust
Ist es sogar möglich, die Verkettung von Vektoren in Rust? Wenn ja, gibt es eine elegante Möglichkeit dies zu tun? Ich habe so etwas wie dieses:
let mut a = vec![1, 2, 3];
let b = vec![4, 5, 6];
for val in &b {
a.push(val);
}
Kennt jemand einen besseren Weg?
- Verwandte, mögliche Duplikate von: Was ist der idiomatischen Weg zum Anhängen eines Segments in einen Vektor?
- Der code in deiner Frage nicht kompilieren.
- Können Sie das konkretisieren? Wollen Sie produzieren ein Vektor durch den Konsum der beiden anderen, oder einfach nur einen iterator über die Verkettung?
- Was ist falsch mit
a.extend(b)
? - Etwas, das nicht praktisch mit.erweitern, (b) ist es nicht wieder b, und als solche bitten etwas komplizierter Ausdrücken in funktionalen Methoden wie anzeigen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Struktur
std::vec::Vec
hat Methodeappend()
:Aus Ihrem Beispiel, der folgende code verketten von zwei Vektoren durch mutierend
a
undb
:Alternativ können Sie
Extend::ausdehnen()
Anhängen aller Elemente von etwas, das gedreht werden kann in einen iterator (wieVec
) zu einem gegebenen Vektor:Beachten Sie, dass der Vektor
b
verschoben wird, statt geleert. Wenn Ihre Vektoren enthalten Elemente, die zur Umsetzung vonCopy
, die Sie übergeben können, eine unveränderliche Referenz auf ein vector -extend()
statt, um zu vermeiden, die sich bewegen. In diesem Fall wird der Vektorb
nicht geändert:Ist es möglich, es zu tun in einer Linie mit
chain()
:Gibt es unendliche Möglichkeiten.
a
undb
sind nicht mehr zur Verfügung steht, das Ergebnis ist frei zu tun, was Sie wollen. Referenz einfach leihen sowohl Vektor-als auch, so dass Sie brauchen, um Ihre lebendig wie lange das Ergebnis Leben wollen. Klonen und Kopieren sind sehr nah, der erste kann teuer werden, der zweite sollte Billig sein. Sie einfach verwenden Sie sowohl Vektor-als auch als Quelle, ohne Sie letzteren, so wird das Resultat frei werden, um Leben, solange Sie es auch wollen, dassa
undb
. Hoffe, es ist klar.