Мне не удалось найти в Rust эквивалент оператора "соединения" над вектором String s. У меня есть Vec<String>, и я хочу присоединиться к ним как один String:

let string_list = vec!["Foo".to_string(),"Bar".to_string()];
let joined = something::join(string_list,"-");
assert_eq!("Foo-Bar", joined);

Связанный:

189
Davide Aversa 4 Фев 2015 в 04:19

3 ответа

Лучший ответ

В ящике itertools есть функция, также называемая join, который присоединяется к итератору:

extern crate itertools; // 0.7.8

use itertools::free::join;
use std::fmt;

pub struct MyScores {
    scores: Vec<i16>,
}

impl fmt::Display for MyScores {
    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
        fmt.write_str("MyScores(")?;
        fmt.write_str(&join(&self.scores[..], &","))?;
        fmt.write_str(")")?;
        Ok(())
    }
}

fn main() {
    let my_scores = MyScores {
        scores: vec![12, 23, 34, 45],
    };
    println!("{}", my_scores); // outputs MyScores(12,23,34,45)
}
11
Shepmaster 5 Июл 2018 в 13:08

Как упоминал Уилфред, SliceConcatExt::connect устарело с версии 1.3.0 в пользу { {X1}}:

let joined = string_list.join("-");
25
Shepmaster 12 Июн 2017 в 13:41