string - regular - Cómo convertir Vec<char> a una cadena
regular expression for (3)
¿Cómo convertir Vec<char>
al formato de cadena para que pueda imprimirlo?
Nota del editor: Esta respuesta fue correcta para las versiones de Rust anteriores a la versión 1.0, pero ahora está desactualizada (
from_chars
no existe, ystd::strbuf::StrBuf
ahora es simplementeString
). Se han actualizado otras respuestas para abordar Rust 1.0.
std::str::from_chars(char_vector.as_slice()); // creates a ~str
char_vector.iter().map(|c| *c).collect::<std::strbuf::StrBuf>();
Documentos: std::str::from_chars
(El último se puede utilizar para recopilar a ~str
también, simplemente cambiando la StrBuf
tipo StrBuf
).
Aquí hay una versión más legible que consume el vector:
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();
}
Tenga en cuenta que collect
se implementa con una llamada a FromIterator::from_iter
:
fn collect<B: FromIterator<Self::Item>>(self) -> B
where
Self: Sized,
{
FromIterator::from_iter(self)
}
Use collect()
en un iterador:
let v = vec![''a'', ''b'', ''c'', ''d''];
let s: String = v.into_iter().collect();
println!("{}", s);
El vector original será consumido. Si necesita conservarlo, use v.iter()
:
let s: String = v.iter().collect();
No hay una forma más directa porque char
es un valor escalar Unicode de 32 bits, y las cadenas en Rust son secuencias de bytes ( u8
) que representan texto en codificación UTF-8. No se asignan directamente a secuencias de char
.