Как преобразовать Vec ‹char› в строку

Как преобразовать Vec<char> в строковую форму, чтобы я мог ее распечатать?


person user3596561    schedule 02.05.2014    source источник


Ответы (2)


Используйте collect() в итераторе:

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

Исходный вектор будет использован. Если вам нужно его сохранить, используйте v.iter():

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

Более прямого пути нет, потому что char - это 32-битное скалярное значение Unicode, а строки в Rust - это последовательности байтов (u8), представляющие текст в кодировке UTF-8. Они не отображаются напрямую в последовательности char.

person Vladimir Matveev    schedule 02.05.2014

Вот более читаемая версия, которая использует вектор:

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();
}

Обратите внимание, что collect реализуется с помощью вызова FromIterator::from_iter:

fn collect<B: FromIterator<Self::Item>>(self) -> B
where
    Self: Sized,
{
    FromIterator::from_iter(self)
}
person malbarbo    schedule 18.05.2016