web-dev-qa-db-ja.com

文字列のベクトルに対する結合演算子と同等のものは何ですか?

Stringsのベクトル上で「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);

関連する:

76
Davide Aversa

Rust 1.3.0以降では、 SliceConcatExt::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より前では、 SliceConcatExt::connect を使用できます。

let joined = string_list.connect("-");

メソッドは 標準ライブラリプレリュード によって自動的にインポートされるため、インポートは必要ありません。

99
MatthewG

Wilfredが述べたように、 SliceConcatExt::connect は、バージョン1.3.0以降、 SliceConcatExt::join の代わりに廃止されました。

let joined = string_list.join("-");
20
Danilo Bargen

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)
}
2
Nick Linker