Bagaimana saya menggabungkan kombinasi tipe berikut:
str
danstr
String
danstr
String
danString
string
rust
string-concatenation
jsalter
sumber
sumber
str
dan&str
ada berbagai jenis dan untuk 99% dari waktu, Anda hanya harus peduli&str
. Ada pertanyaan lain yang merinci perbedaan di antara mereka.Jawaban:
Ketika Anda menggabungkan string, Anda perlu mengalokasikan memori untuk menyimpan hasilnya. Cara termudah untuk memulai adalah
String
dan&str
:Di sini, kami memiliki string yang dimiliki yang dapat kami mutasi. Ini efisien karena berpotensi memungkinkan kita untuk menggunakan kembali alokasi memori. Ada kasus yang sama untuk
String
danString
, seperti yang&String
dapat direferensikan sebagai&str
.Setelah ini,
another_owned_string
tidak tersentuh (perhatikan tidak adamut
kualifikasi). Ada varian lain yang mengkonsumsi tersebutString
tetapi tidak memerlukan itu bisa berubah. Ini adalah implementasi dariAdd
sifat yang mengambilString
sebagai sebagai sisi kiri dan&str
sebagai sebagai sisi kanan:Perhatikan bahwa
owned_string
tidak lagi dapat diakses setelah panggilan ke+
.Bagaimana jika kita ingin menghasilkan string baru, membiarkan keduanya tidak tersentuh? Cara paling sederhana adalah dengan menggunakan
format!
:Perhatikan bahwa kedua variabel input tidak dapat diubah, jadi kami tahu bahwa mereka tidak tersentuh. Jika kita ingin melakukan hal yang sama untuk kombinasi apa pun
String
, kita dapat menggunakan fakta yangString
juga dapat diformat:Anda tidak harus menggunakannya
format!
. Anda dapat mengkloning satu string dan menambahkan string lainnya ke string baru:Catatan - semua spesifikasi tipe yang saya lakukan adalah redundan - kompiler dapat menyimpulkan semua tipe yang dimainkan di sini. Saya menambahkannya hanya untuk menjadi jelas bagi orang yang baru mengenal Rust, karena saya berharap pertanyaan ini menjadi populer di grup itu!
sumber
Add
/+
simbol? Anda bisa menutupinya jika Anda mau..to_owned()
dan.to_string()
telah diperbaiki sejak komentar di atas berkat penerapan spesialisasi. Mereka berdua sekarang memiliki kinerja yang sama ketika dipanggil&str
. Komit yang relevan: github.com/rust-lang/rust/pull/32586/filesUntuk menggabungkan beberapa string menjadi satu string, dipisahkan oleh karakter lain, ada beberapa cara.
Yang terbaik yang pernah saya lihat adalah menggunakan
join
metode pada array:Tergantung pada kasus penggunaan Anda, Anda mungkin juga lebih suka kontrol yang lebih besar:
Ada beberapa cara manual yang telah saya lihat, beberapa menghindari satu atau dua alokasi di sana-sini. Untuk tujuan keterbacaan saya menemukan dua di atas sudah cukup.
sumber
join
didokumentasikan? Tampaknya berada di tengah-tengah antara Array dan String. Saya mencari melalui dokumentasi array dan dengan cepat bingung.join
sebenarnya melekat padaSliceContactExt
sifat tersebut . Ciri tersebut ditandai tidak stabil tetapi metodenya stabil dan termasuk dalam Prelude sehingga mereka dapat digunakan di mana saja secara default. Tim tampaknya sangat menyadari sifat ini tidak perlu ada dan saya membayangkan hal-hal akan berubah di masa depan dengannya.Saya pikir
concat
metode itu dan+
harus disebutkan di sini juga:dan ada juga
concat!
makro tetapi hanya untuk literal:sumber
+
sudah disebutkan dalam jawaban yang ada . ( Ini merupakan implementasi dariAdd
sifat yang mengambilString
sebagai sisi kiri dan&str
sebagai sisi kanan: )Cara sederhana untuk menggabungkan string di RUST
Ada berbagai metode yang tersedia di RUST untuk menggabungkan string
Metode pertama (Menggunakan
concat!()
):Output dari kode di atas adalah:
Metode kedua (menggunakan
push_str()
dan+
operator):Output dari kode di atas adalah:
Metode ketiga (
Using format!()
):Output dari kode di atas adalah:
memeriksanya dan bereksperimen dengan Rust play ground
sumber