漂亮地打印一个带有分隔符的 Vec<char>
pretty printing a Vec<char> with a separator
我正在尝试将 join
(或类似的东西)应用到 Vec<char>
以便打印出来。
到目前为止我想到的是这个(这就是我想要的):
let vec: Vec<char> = "abcdef".chars().collect();
let sep = "-";
let vec_str: String = vec
.iter().map(|c| c.to_string()).collect::<Vec<String>>().join(sep);
println!("{}", vec_str); // a-b-c-d-e-f
这似乎过于复杂(并分配了一个并不真正需要的 Vec<String>
)。
我还尝试通过显式创建切片来让 std::slice::join
工作:
let vec_str: String = (&vec[..]).join('-');
但是编译器在这里抱怨:
method not found in &[char]
是否有更简单的方法从 Vec<char>
创建可打印的 String
,元素之间有分隔符?
您可以使用 itertools crate 中的intersperse
。
use itertools::Itertools; // 0.8.2
fn main() {
let vec : Vec<_> = "abcdef".chars().collect();
let sep = '-';
let sep_str : String = vec.iter().intersperse(&sep).collect();
println!("{}", sep_str);
}
我正在尝试将 join
(或类似的东西)应用到 Vec<char>
以便打印出来。
到目前为止我想到的是这个(这就是我想要的):
let vec: Vec<char> = "abcdef".chars().collect();
let sep = "-";
let vec_str: String = vec
.iter().map(|c| c.to_string()).collect::<Vec<String>>().join(sep);
println!("{}", vec_str); // a-b-c-d-e-f
这似乎过于复杂(并分配了一个并不真正需要的 Vec<String>
)。
我还尝试通过显式创建切片来让 std::slice::join
工作:
let vec_str: String = (&vec[..]).join('-');
但是编译器在这里抱怨:
method not found in
&[char]
是否有更简单的方法从 Vec<char>
创建可打印的 String
,元素之间有分隔符?
您可以使用 itertools crate 中的intersperse
。
use itertools::Itertools; // 0.8.2
fn main() {
let vec : Vec<_> = "abcdef".chars().collect();
let sep = '-';
let sep_str : String = vec.iter().intersperse(&sep).collect();
println!("{}", sep_str);
}