我无法找到"加入" 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);
相关:
答案 0 :(得分:93)
在Rust 1.3.0及更高版本中,SliceConcatExt::join
可用:
fn main() {
let string_list = vec!["Foo".to_string(),"Bar".to_string()];
let joined = string_list.join("-");
assert_eq!("Foo-Bar", joined);
}
在1.3.0之前,您可以使用SliceConcatExt::connect
:
let joined = string_list.connect("-");
请注意,您不需要任何导入,因为standard library prelude会自动导入方法。
答案 1 :(得分:21)
正如Wilfred所述,自{1.3}版以来,SliceConcatExt::connect
已被弃用,而SliceConcatExt::join
支持{/ 3}}。
let joined = string_list.join("-");
答案 2 :(得分:1)
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)
}