我无法找到Rust的“join”操作符在字符串向量上的等效。我有一个Vec<字符串>,我想加入他们作为一个单一的字符串:
let string_list = vec!["Foo".to_string(),"Bar".to_string()];
let joined = something::join(string_list,"-");
assert_eq!("Foo-Bar", joined);
相关:
在Rust中,用空格分隔的迭代器的惯用方法是什么?
我无法找到Rust的“join”操作符在字符串向量上的等效。我有一个Vec<字符串>,我想加入他们作为一个单一的字符串:
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("-");
注意,您不需要导入任何东西,因为这些方法是由标准库序言自动导入的。
其他回答
在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("-");
注意,您不需要导入任何东西,因为这些方法是由标准库序言自动导入的。
正如Wilfred所提到的,SliceConcatExt::connect从1.3.0版本开始就被弃用了,取而代之的是SliceConcatExt::join:
let joined = string_list.join("-");
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)
}