2014-05-02 8 views

Antwort

2

Diese Antwort war korrekt, wenn sie geschrieben wurde, aber jetzt veraltet ist (from_chars existiert nicht, und std::strbuf::StrBuf ist jetzt nur String), es gibt also keine Notwendigkeit zu einem Downvote. Werfen Sie einen Blick auf die Antwort von Vladimir Matveev (und upvote) unten.


std::str::from_chars(char_vector.as_slice()); // creates a ~str 

char_vector.iter().map(|c| *c).collect::<std::strbuf::StrBuf>(); 

Docs: std::str::from_chars

(Letzteres verwendet werden kann, um ein ~str zu sammeln, nur durch den StrBuf Typen Hinweis zu ändern.)

+2

Wenn eine Antwort nicht auf dem neuesten Stand ist, ist es logisch, sie abzustimmen. Aktualisieren Sie Ihre Antwort wird die Abstimmung stoppen. – Stargateur

+3

Aktualisieren meiner Antwort wird Kredit/Stimmen von Vladimir nehmen. – huon

+0

Sie können die Antwort mit den entsprechenden Versionen von Rust aktualisieren. – courteouselk

57

für Rust 1.0 Aktualisiert

sehr einfach, nur collect() auf einem Iterator verwenden:

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

Der ursprüngliche Vektor verbraucht wird. Wenn Sie sie halten müssen, verwenden v.iter().cloned():

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

Es gibt kein direkteren Weg ist, weil char ist eine 32-Bit-Unicode-Skalarwert und Strings in Rust sind Sequenzen von Bytes (u8), den Text in UTF- 8 Codierung. Sie sind nicht direkt auf Sequenzen von char s abgebildet.

3

Hier ist eine besser lesbare Version, verbraucht den Vektor:

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 collect wird mit einem Aufruf an FromIterator::from_iter implementiert:

fn collect<B: FromIterator<Self::Item>>(self) -> B where Self: Sized { 
    FromIterator::from_iter(self) 
} 
Verwandte Themen