Je n'ai pas pu trouver l'équivalent de Rust pour l'opérateur "join" sur un vecteur de String
s. J'ai un Vec<String>
et j'aimerais les rejoindre en tant que simple String
:
let string_list = vec!["Foo".to_string(),"Bar".to_string()];
let joined = something::join(string_list,"-");
assert_eq!("Foo-Bar", joined);
Dans Rust 1.3.0 et versions ultérieures, SliceConcatExt::join
est disponible:
fn main() {
let string_list = vec!["Foo".to_string(),"Bar".to_string()];
let joined = string_list.join("-");
assert_eq!("Foo-Bar", joined);
}
Avant la version 1.3.0, vous pouvez utiliser SliceConcatExt::connect
:
let joined = string_list.connect("-");
Notez que vous n'avez besoin d'aucune importation car les méthodes sont automatiquement importées par la bibliothèque standard prélude .
Comme mentionné par Wilfred, SliceConcatExt::connect
est obsolète depuis la version 1.3.0 au profit de SliceConcatExt::join
:
let joined = string_list.join("-");
Il existe une fonction de itertools
crate également appelée join
qui rejoint un itérateur:
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)
}