我找不到Rust中用于将String
向量合并的“join”运算符的等效方法。我有一个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中用于将String
向量合并的“join”运算符的等效方法。我有一个Vec<String>
,我想将它们合并为单个String
:
let string_list = vec!["Foo".to_string(),"Bar".to_string()];
let joined = something::join(string_list,"-");
assert_eq!("Foo-Bar", joined);
相关:
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版本之前,该方法被称为{{link1: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)
}
.iter().map(|x| x.to_string()).collect::<Vec<_>>().join(", ")
- theonlygusti
SliceConcatExt
仅限于使用夜版。 - user707650use
这个特性,因为它在预导入中已经包含了。 - interjayitertools
中有一个join
函数。 - Steve Powell