如何将Vec <char>转换为字符串</char>

时间:2014-05-02 14:37:01

标签: string rust

如何将Vec<char>转换为字符串形式以便我可以打印它?

3 个答案:

答案 0 :(得分:89)

在迭代器上使用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中的字符串是表示UTF-8编码文本的字节序列(u8)。它们不直接映射到char s。

的序列

答案 1 :(得分:13)

这是一个更易读的版本,它使用了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();
}

请注意collect是通过调用FromIterator::from_iter实现的:

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

答案 2 :(得分:2)

(直接从Vladimir Matveev's answer below复制。)

在迭代器上使用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中的字符串是表示UTF-8编码文本的字节序列(u8)。它们不直接映射到char s。

的序列