красивая печать Vec <char> с разделителем
Я пытаюсь подать заявку 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('-');
но здесь компилятор жалуется:
метод не найден в
&[char]
Есть ли более простой способ создать печатный String
из Vec<char>
с разделителем между элементами?
1 ответ
Решение
Вы можете использовать intersperse
из ящика itertools.
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);
}