Apa yang setara dengan operator gabungan pada vektor String?


Jawaban:


153

Di Rust 1.3.0 dan yang lebih baru, jointersedia:

fn main() {
    let string_list = vec!["Foo".to_string(),"Bar".to_string()];
    let joined = string_list.join("-");
    assert_eq!("Foo-Bar", joined);
}

Sebelum 1.3.0 metode ini disebut connect:

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

Perhatikan bahwa Anda tidak perlu mengimpor apa pun karena metode secara otomatis diimpor oleh pustaka standar pendahuluan .


7
Mungkin ini telah berubah, tetapi SliceConcatExthanya untuk malam hari.

5
@Evert Ciri ini ditandai tidak stabil, tetapi metodenya stabil sehingga Anda dapat menggunakannya. Anda tidak perlu usemenunjukkan sifat tersebut secara eksplisit karena ini adalah pendahuluan.
interjay


1
@shepmaster Jika saya membaca 'balasan' Anda dengan benar, berarti ada joindi itertools.
Steve Powell

2
Terima kasih @shepmaster. Sayangnya, referensi sederhana Anda ke jawaban lain agak samar, jadi sama sekali tidak jelas bagian mana dari jawaban itu yang relevan. Meskipun komentar, koreksi, dan jawaban Anda selalu luar biasa, gaya Anda merendahkan dan tidak menyenangkan.
Steve Powell


10

Ada fungsi dari itertoolspeti yang juga disebut joinyang bergabung dengan iterator:

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)
}

6
Pengguna kode ini harus menyadari bahwa ia mengalokasikan string yang berpotensi besar hanya untuk membuangnya. Lebih efisien jika menulis string langsung ke keluaran. Lihat juga Apa cara idiomatik untuk mencetak iterator yang dipisahkan oleh spasi di Rust? , Di Rust, apa cara terbaik untuk mencetak sesuatu di antara setiap nilai dalam sebuah wadah? .
Shepmaster

2
Bisa dimaklumi, meskipun pertanyaannya tentang join, bukan bagaimana cara mengoptimalkan algoritma format, bukan?
Nick Linker

6
collect+ joinlebih cepat dan tidak menambahkan ketergantungan, lihat inti ini untuk patokan
murlakatamenka
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.