So konvertieren Sie Vec <char> in einen String

79

Wie konvertiere Vec<char>ich in eine Zeichenfolge, damit ich sie drucken kann?

user3596561
quelle

Antworten:

123

Verwendung collect()auf einem Iterator:

let v = vec!['a', 'b', 'c', 'd'];
let s: String = v.into_iter().collect();
println!("{}", s);

Der ursprüngliche Vektor wird verbraucht. Wenn Sie es behalten müssen, verwenden Sie v.iter():

let s: String = v.iter().collect();

Es gibt keinen direkteren Weg, da chares sich um einen 32-Bit-Unicode-Skalarwert handelt und Zeichenfolgen in Rust Folgen von Bytes ( u8) sind, die Text in UTF-8-Codierung darstellen. Sie werden nicht direkt Sequenzen von chars zugeordnet.

Vladimir Matveev
quelle
27

Hier ist eine besser lesbare Version, die den Vektor verbraucht:

use std::iter::FromIterator;

fn main() {
    let v = vec!['a', 'b', 'c', 'd'];
    let s = String::from_iter(v);
    // vs
    let s: String = v.into_iter().collect();
}

Beachten Sie, dass dies collectmit einem Aufruf an Folgendes implementiert wird FromIterator::from_iter:

fn collect<B: FromIterator<Self::Item>>(self) -> B
where
    Self: Sized,
{
    FromIterator::from_iter(self)
}
Malbarbo
quelle