Как преобразовать Vec<char>
в строчную форму, чтобы я мог ее распечатать?
Как преобразовать Vec <char> в строку
Ответ 1
(Скопировано непосредственно из ответа Владимира Матвеева ниже, чтобы быть актуальным для современного Rust.)
Используйте 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
.
Ответ 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
.
Ответ 3
Вот более читаемая версия, которая использует вектор:
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)
}