উত্তর:
আপনি যখন স্ট্রিংগুলি একত্রীকরণ করেন, ফলাফল সংরক্ষণের জন্য আপনাকে মেমরি বরাদ্দ করতে হবে। এর সাথে শুরু করা সবচেয়ে সহজ Stringএবং &str:
fn main() {
let mut owned_string: String = "hello ".to_owned();
let borrowed_string: &str = "world";
owned_string.push_str(borrowed_string);
println!("{}", owned_string);
}
এখানে, আমাদের একটি মালিকানাধীন স্ট্রিং রয়েছে যা আমরা পরিবর্তন করতে পারি। এটি দক্ষ কারণ এটি আমাদের মেমরি বরাদ্দ পুনরায় ব্যবহার করতে দেয়। এর জন্য একই রকম কেস রয়েছে Stringএবং Stringযেমনটি &String বিবেচিত হতে পারে&str ।
fn main() {
let mut owned_string: String = "hello ".to_owned();
let another_owned_string: String = "world".to_owned();
owned_string.push_str(&another_owned_string);
println!("{}", owned_string);
}
another_owned_stringএটির পরে, কোনও ছোঁয়াচে থাকা (কোনও বাছাইকারী নোট করুন mut)। এর মধ্যে আরও একটি বৈকল্পিক রয়েছে যা গ্রাস করে Stringতবে এটিকে পরিবর্তনের প্রয়োজন হয় না। এটি একটি হল বাস্তবায়ন Addবৈশিষ্ট্য যে একটি লাগে Stringএবং বাম দিকে একটি &strডানদিকে হিসাবে:
fn main() {
let owned_string: String = "hello ".to_owned();
let borrowed_string: &str = "world";
let new_owned_string = owned_string + borrowed_string;
println!("{}", new_owned_string);
}
নোট করুন যে owned_stringকল করার পরে আর অ্যাক্সেসযোগ্য নয় +।
আমরা যদি উভয়কেই বাতলে না রেখে নতুন স্ট্রিং তৈরি করতে চাই? সবচেয়ে সহজ উপায়টি হ'ল format!:
fn main() {
let borrowed_string: &str = "hello ";
let another_borrowed_string: &str = "world";
let together = format!("{}{}", borrowed_string, another_borrowed_string);
println!("{}", together);
}
নোট করুন যে উভয় ইনপুট ভেরিয়েবল অপরিবর্তনীয়, তাই আমরা জানি যে সেগুলি স্পর্শ হয়নি। যদি আমরা কোনও সংমিশ্রণের জন্য একই জিনিসটি করতে চাইতাম String, তবে আমরা Stringফর্ম্যাট করতে পারি এমন সত্যটি ব্যবহার করতে পারি:
fn main() {
let owned_string: String = "hello ".to_owned();
let another_owned_string: String = "world".to_owned();
let together = format!("{}{}", owned_string, another_owned_string);
println!("{}", together);
}
আপনি না আছে ব্যবহার করতে format!যদিও। আপনি একটি স্ট্রিং ক্লোন করতে এবং অন্য স্ট্রিংটিকে নতুন স্ট্রিংয়ের সাথে যুক্ত করতে পারেন:
fn main() {
let owned_string: String = "hello ".to_owned();
let borrowed_string: &str = "world";
let together = owned_string.clone() + borrowed_string;
println!("{}", together);
}
দ্রষ্টব্য - আমি যে ধরণের স্পেসিফিকেশনটি দিয়েছি তা সমস্তই রিলান্ডান্ট - সংকলক এখানে খেলার সমস্ত ধরণের অনুমান করতে পারে। আমি এগুলিকে কেবল রাস্টে নতুন লোকদের কাছে পরিষ্কার হওয়ার জন্য যুক্ত করেছি, যেমনটি আমি আশা করি যে এই প্রশ্নটি এই গোষ্ঠীর সাথে জনপ্রিয় হবে!
Add/ +প্রতীক সম্পর্কে কি মনে করেন ? আপনি চাইলে এটি কভার করতে পারেন।
.to_owned()এবং .to_string()যেহেতু impl বিশেষজ্ঞতা উপরে মন্তব্য ধন্যবাদ সংশোধন করা হয়েছে। এ-তে ডাকলে উভয়েরই এখন একই পারফরম্যান্স &str। প্রাসঙ্গিক প্রতিশ্রুতি: github.com/rust-lang/rust/pull/32586/files
একক স্ট্রিংয়ে একাধিক স্ট্রিংকে অন্য অক্ষর দ্বারা পৃথক করা, কয়েকটি উপায় রয়েছে।
আমি সবচেয়ে ভাল দেখেছি joinএকটি অ্যারে পদ্ধতি ব্যবহার করা হয় :
fn main() {
let a = "Hello";
let b = "world";
let result = [a, b].join("\n");
print!("{}", result);
}
আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে আপনি আরও নিয়ন্ত্রণ পছন্দ করতে পারেন:
fn main() {
let a = "Hello";
let b = "world";
let result = format!("{}\n{}", a, b);
print!("{}", result);
}
আমি আরও কিছু ম্যানুয়াল উপায় দেখেছি, কিছু এখানে এবং সেখানে এক বা দুটি বরাদ্দ এড়ানো হচ্ছে। পাঠযোগ্যতার উদ্দেশ্যে আমি উপরের দুটি যথেষ্ট বলে মনে করি।
joinআসলে সংযুক্ত বৈশিষ্ট্য । বৈশিষ্ট্যটি অস্থির হিসাবে চিহ্নিত করা হয়েছে তবে এর পদ্ধতিগুলি স্থিতিশীল এবং প্রিলিওডে অন্তর্ভুক্ত রয়েছে যাতে তারা ডিফল্টরূপে সর্বত্র ব্যবহারযোগ্য হয়। দলটি এই বৈশিষ্ট্যটির অস্তিত্বের দরকার নেই বলে ভালভাবে সচেতন বলে মনে হচ্ছে এবং ভবিষ্যতে জিনিসগুলি এর সাথে পরিবর্তিত হবে বলে আমি ধারণা করি। SliceContactExt
আমি মনে করি যে concatপদ্ধতিটি এবং +এখানেও উল্লেখ করা উচিত:
assert_eq!(
("My".to_owned() + " " + "string"),
["My", " ", "string"].concat()
);
এবং concat!ম্যাক্রো রয়েছে তবে কেবল আক্ষরিক জন্য:
let s = concat!("test", 10, 'b', true);
assert_eq!(s, "test10btrue");
+ইতিমধ্যে একটি বিদ্যমান উত্তরে উল্লেখ করা হয়েছে । ( এটি এমন একটি Addবৈশিষ্ট্যের বাস্তবায়ন Stringযা বাম-হাতের দিক এবং &strডান-হাতের দিক হিসাবে গ্রহণ করে :)
স্ট্রিংগুলিকে সংযুক্ত করার জন্য রাস্টে বিভিন্ন পদ্ধতি রয়েছে
concat!()):fn main() {
println!("{}", concat!("a", "b"))
}
উপরের কোডটির আউটপুট হল:
AB
push_str()এবং +অপারেটর):fn main() {
let mut _a = "a".to_string();
let _b = "b".to_string();
let _c = "c".to_string();
_a.push_str(&_b);
println!("{}", _a);
println!("{}", _a + &_b);
}
উপরের কোডটির আউটপুট হল:
AB
অ আ ক খ
Using format!()):fn main() {
let mut _a = "a".to_string();
let _b = "b".to_string();
let _c = format!("{}{}", _a, _b);
println!("{}", _c);
}
উপরের কোডটির আউটপুট হল:
AB
এটি পরীক্ষা করে দেখুন এবং মরিচা খেলার মাঠ নিয়ে পরীক্ষা করুন
strএবং&strহয় বিভিন্ন ধরনের এবং সময় 99%, আপনি মাত্র যত্ন করা উচিত&str। তাদের মধ্যে পার্থক্য বিশদ সম্পর্কিত অন্যান্য প্রশ্ন রয়েছে।