相当于字符串向量上的连接运算符



我无法在 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)
}

最新更新