Як перетворити Vec <char> у рядок


Відповіді:


129

Використання 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. Вони не відображають безпосередньо послідовності chars.


27

Ось більш читабельна версія, яка споживає вектор:

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)
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.