ماڈیول اسباق (1/2)
مجموعے اور ہیش میپ
مجموعے اعداد و شمار کے ڈھانچے ہیں جو متعدد اقدار کو رکھنے کے قابل ہیں۔ ابتدائی صفوں اور ٹوپل قسموں کے برعکس، ان جمع کردہ ڈیٹا کو ہیپ پر محفوظ کیا جاتا ہے، جس کا مطلب ہے کہ ڈیٹا کی مقدار کو مرتب کرنے کے وقت معلوم ہونے کی ضرورت نہیں ہے اور پروگرام کے عمل کے دوران **متحرک طور پر بڑھ یا سکڑ سکتا ہے۔
Rust میں عام طور پر استعمال ہونے والے دو مجموعے ویکٹرز (Vec<T>) اور کی-ویلیو میپس (HashMap<K, V>) ہیں۔
ویکٹرز (Vec<T>)
ویکٹرز آپ کو ایک ہی ڈیٹا ڈھانچے میں ایک ہی قسم کی ایک سے زیادہ قدروں کو ذخیرہ کرنے کی اجازت دیتے ہیں جو تمام اقدار کو ایک دوسرے کے ساتھ میموری میں رکھتا ہے:
fn main() {
// Creating an empty mutable vector
let mut v: Vec<i32> = Vec::new();
// Or using the vec! macro
let mut v2 = vec![1, 2, 3];
// Appending elements
v.push(5);
v.push(6);
// Accessing elements by index
let third = v2[2];
println!("The third element is: {}", third);
}ہیش میپ (HashMap<K, V>)
HashMap<K, V> مجموعہ K قسم کی کلیدوں کی ایک میپنگ کو V قسم کی قدروں میں محفوظ کرتا ہے۔ یہ ایک ہیشنگ فنکشن کے ذریعے کام کرتا ہے، جو اس بات کا تعین کرتا ہے کہ ان کیز اور اقدار کو میموری میں کیسے رکھا جاتا ہے۔ جب آپ اعداد و شمار کو عددی اشاریہ سے نہیں بلکہ کلید (جیسے نام یا ID) کے ذریعے تلاش کرنا چاہتے ہیں تو یہ انتہائی مفید ہے۔
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
// Inserting key-value pair
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);
// Reading a value (returns an Option<&V>)
let team_name = String::from("Blue");
let score = scores.get(&team_name);
match score {
Some(val) => println!("Score: {}", val),
None => println!("No score found."),
}
}خود ہی آزمائیں۔
ورزش 1: Vec پر بنیادی آپریشنز
Vec::new() کا استعمال کرتے ہوئے v نامی ایک تغیر پذیر انٹیجر ویکٹر کا اعلان کریں۔ پش طریقہ کا استعمال کرتے ہوئے 10، 20 اور 30 عناصر کو ترتیب میں شامل کریں۔ آخر میں، پرنٹ ایل این کا استعمال کرتے ہوئے ویکٹر کا پہلا عنصر (انڈیکس 0) پرنٹ کریں۔
اشارہ دکھائیں۔
ویکٹر کو شروع کرنے کے لیے `let mut v = Vec::new();` استعمال کریں، `v.push(value)` کے ساتھ عناصر داخل کریں اور `v[0]` کے ساتھ رسائی کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش 2: ہیش میپ کے ساتھ صارف کے اسکور
std::collections::HashMap درآمد کریں۔ مین فنکشن میں، اسٹرنگ کیز اور i32 ویلیوز کو ذخیرہ کرنے کے لیے ایک بدلنے والا HashMap نامی اسکور کا اعلان کریں۔ صارف 'ایلس' کے لیے 50 کا سکور داخل کریں۔ گیٹ میتھڈ کا استعمال کرتے ہوئے اسکور کو محفوظ طریقے سے نکالیں اور اسے پرنٹ کرنے کے لیے کھولیں۔
اشارہ دکھائیں۔
'استعمال std::collections::HashMap;' کو نہ بھولیں۔ `scores.insert(String::from("Alice"), 50) کے ساتھ داخل کریں؛ اور `.get("Alice").unwrap()` کے ساتھ ویلیو حاصل کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
مشق 3: ویکٹر میں قدروں کو دوگنا کرنا
double_values نامی ایک فنکشن کی وضاحت کریں جو عدد کے ایک ٹکڑوں اور[i32] کا حوالہ قبول کرتا ہے اور ایک نیا Vec<i32> لوٹاتا ہے جس میں وہی عناصر ہیں جن کو 2 سے ضرب کیا جاتا ہے۔
اشارہ دکھائیں۔
فنکشن کو سلائس کے عناصر پر اعادہ کرنا چاہئے اور انہیں واپس آنے والے نئے ویکٹر میں 2 سے ضرب کرکے داخل کرنا چاہئے۔
3 کوششوں کے بعد حل دستیاب ہے۔