উত্তর:
আসুন ধরা যাক আপনার কাছে এমন কিছু এক্স রয়েছে যা ইন্টিআইটরেটরের বৈশিষ্ট্যকে কার্যকর করে এবং আপনাকে একটি ফাংশন এফ কল করতে হবে যা কোনও উপাদানের সূচক এবং এর সাথে একটি রেফারেন্স নেয়। এটি করার মানক উপায়
x.iter().enumerate().map(f)
পরিবর্তে আপনি করতে পারেন
(0..).zip(x).map(f)
এবং নিজেকে কেবল অস্বাভাবিকভাবে দীর্ঘ গণনাই নয়, এটির জন্য কলও সংরক্ষণ করুন!
আপনার যদি অনেকগুলি পরিবর্তনীয় ভেরিয়েবলের প্রয়োজন হয় তবে এটি তাদের ঘোষণা এবং সেগুলির সূচনা করার জন্য প্রচুর জায়গা নষ্ট করতে পারে, যেহেতু প্রত্যেকটির জন্য মিউট কীওয়ার্ডের প্রয়োজন হয় এবং আপনি a = b = c = 0 এর মতো কিছু করতে পারবেন না। তারপরে একটি সমাধান হল একটি পরিবর্তনীয় অ্যারে ঘোষণা করা
let mut a=[0;5];
আপনি প্রতিটি অতিরিক্ত বনাম বনাম প্রতিবার 3 টি অতিরিক্ত বাইট ব্যয় করেন:
a[0]+=1;
তবে এটি প্রায়শই মূল্যবান হতে পারে।
একই কৌশলটির জন্য টিপলস ব্যবহার করা প্রায়শই আরও ভাল বিকল্প:
let mut t=(1,4,"this", 0.5, 'c');
অ্যারে বনাম প্রতিটি ব্যবহারে একটি বাইট সংরক্ষণ করার সুবিধা রয়েছে:
t.0=2
এটি তাদের বিভিন্ন ধরণের হতে দেয়। ডাউনসাইডে, এটি আরম্ভ করার জন্য আরও অক্ষর প্রয়োজন।
&str
হচ্ছেString
এগুলি কখনই করবেন না:
s.to_string() // 13 bytes
s.to_owned() // 12 bytes
এটি সর্বদা সংক্ষিপ্ত:
s.repeat(1) // 11 bytes
যদি s
একটি স্ট্রিং আক্ষরিক হয়:
format!(s) // 10 bytes
উদাহরণস্বরূপ: 2 বাইট সংরক্ষণ করার format!("")
পরিবর্তে ব্যবহার করুন String::new()
।
টাইপ অনুমান কাজ করে:
s.into() // 8 bytes
উদাহরণস্বরূপ স্ট্রিং ফর্ম্যাটিং print!()
ব্যবহার করার সময়, বিন্যাসে প্রতি আইটেমের মধ্যে একটি বাইট সংরক্ষণ করার জন্য কেউ উভয় সংখ্যক এবং সংখ্যাযুক্ত বিন্যাস ব্যবহার করতে পারে:
একটি উদাহরণ সহ সেরা প্রদর্শিত:
fn main(){
print!("{}{}{}. Yes, {0}{}{2}. All you other{1}{2}s are just imitating.",
"I'm",
" Slim",
" Shady",
" the real");
}
কোন ফলাফল:
I'm Slim Shady. Yes, I'm the real Shady. All you other Slim Shadys are just imitating.
সুতরাং বিনা শঙ্কিত বিন্যাসগুলি আইটেমগুলিকে ক্রম হিসাবে অর্পণ করা হবে, এটি আপনাকে সেগুলিতে সূচকটি এড়িয়ে যেতে দেয়। মনে রাখবেন যে আপনি ফর্ম্যাট করতে প্রতি আইটেমের জন্য একটি নম্বরযুক্ত বিন্যাস ব্যবহার করতে পারেন, তারপরে এটি ব্যবহার হয়ে যাবে।
বিভিন্ন বিষয় বিবেচনা করার পরে, আমি মনে করি এটি সাধারণত একটি লাইন পুনরুদ্ধার করার সবচেয়ে স্বল্পতম উপায়। লাইনের একটি নতুন লাইন রয়েছে, এটি ছাঁটাই করে মুছে ফেলা যায় ( .trim()
) বা যদি তা কেটে ফেলে দেওয়া যায় না।
let y=&mut"".into();std::io::stdin().read_line(y);
একাধিক লাইনের জন্য, lines
পুনরুক্তি ব্যবহার করা যেতে পারে, পুনরাবৃত্ত রেখাটি নতুন লাইনে শেষ হয় না। আমদানি করার জন্য গ্লোব আমদানি প্রয়োজন BufRead
, প্রকারের lines
জন্য উপলব্ধ হওয়ার জন্য এটি প্রয়োজন StdinLock<'_>
।
use std::io::*;let y=stdin();y.lock().lines()
ফাংশনগুলিতে ফিরে আসার ক্ষেত্রে ()
যেখানে সর্বশেষ প্রকাশটি প্রকারভেদযুক্ত ()
সেখানে আপনার পিছনের দরকার নেই ;
:
fn main(){print!("Hello, world!")}