如何从char数组转换[char; N]到一个字符串切片&str?

Ruf*_*ind 0 string char rust

给定一个固定长度的char数组,例如:

let s: [char; 5] = ['h', 'e', 'l', 'l', 'o'];
Run Code Online (Sandbox Code Playgroud)

我如何获得&str

Jos*_*ada 6

另一条我在上面没有看到的简短的台词:

let whatever_char_array = ['h', 'e', 'l', 'l', 'o'];
let string_from_char_array = String::from_iter(whatever_char_array);
Run Code Online (Sandbox Code Playgroud)

注意:此功能(迭代array)是最近引入的。我尝试寻找确切的 rustc 版本,但无法...


She*_*ter 5

你不能没有一些分配,这意味着你最终会得到一个String.

let s2: String = s.iter().collect();
Run Code Online (Sandbox Code Playgroud)

问题是Rust中的字符串不是char s的集合,它们是UTF-8,这是一种没有每个字符固定大小的编码.

例如,在这种情况下,阵列将占用5 x 32位,总共20个字节.字符串的数据总共需要5个字节(尽管还有3个指针大小的值,因此String在这种情况下整体占用更多内存).


我们从数组和调用开始[]::iter,它产生类型的值&char.然后我们用它Iterator::collect转换Iterator<Item = &char>成aString.这使用迭代器size_hint预先分配空间String,减少了额外分配的需要.