我无法在String
s 的向量上找到“ join”运算符的Rust等效项。我有一个Vec<String>
,我想作为一个人加入他们String
:
let string_list = vec!["Foo".to_string(),"Bar".to_string()];
let joined = something::join(string_list,"-");
assert_eq!("Foo-Bar", joined);
有关:
我无法在String
s 的向量上找到“ join”运算符的Rust等效项。我有一个Vec<String>
,我想作为一个人加入他们String
:
let string_list = vec!["Foo".to_string(),"Bar".to_string()];
let joined = something::join(string_list,"-");
assert_eq!("Foo-Bar", joined);
有关:
Answers:
在Rust 1.3.0和更高版本中,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之前,此方法称为connect
:
let joined = string_list.connect("-");
请注意,您不需要导入任何内容,因为方法是由标准库序言自动导入的。
use
特征,因为它处于序幕中。
join
in itertools
。
正如Wilfred所提到的,SliceConcatExt::connect
自1.3.0版起已弃用,而支持SliceConcatExt::join
:
let joined = string_list.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)
}
join
,而不是如何优化格式化算法的方法,不是吗?
SliceConcatExt
仅限于每晚。