我无法在 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);
相关:
- 在
- Rust 中打印由空格分隔的迭代器的惯用方法是什么?
在 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("-");
请注意,您不需要导入任何内容,因为这些方法是由标准库前奏自动导入的。
join
复制矢量的元素,它不会移动它们,因此它会保留矢量的内容,而不是破坏它。
正如 Wilfred 所提到的,SliceConcatExt::connect
自 1.3.0 版以来已被弃用,取而代之的是 SliceConcatExt::join
:
let joined = string_list.join("-");
itertools
crate 中有一个函数,也称为 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)
}