красивая печать 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);
}

Детская площадка

Другие вопросы по тегам