Menu
Coddy logo textTech

הסרת איברים

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 13 מתוך 66.

לפעמים צריך להסיר איברים מווקטור, ולא רק להוסיף אותם. Rust מספקת שתי שיטות עיקריות להסרת איברים, וכל אחת מיועדת למצבים שונים.

השיטה .pop() מסירה ומחזירה את האיבר האחרון מהווקטור:

let mut numbers = vec![10, 20, 30, 40];
let last = numbers.pop(); // מסיר את 40, מחזיר Some(40)
// numbers מכיל כעת [10, 20, 30]

שימו לב ש-.pop() מחזירה Option — היא נותנת לכם Some(value) אם היה איבר להסיר, או None אם הווקטור כבר היה ריק. כך בטוח להשתמש בה גם בווקטורים ריקים.

המתודה .remove() מסירה איבר באינדקס מסוים ומחזירה את אותו איבר:

let mut fruits = vec!["apple", "banana", "cherry"];
let removed = fruits.remove(1); // מסיר את "banana"
// fruits מכיל כעת את ["apple", "cherry"]

כשמשתמשים ב־.remove(), כל האיברים שאחרי האינדקס שהוסר זזים שמאלה כדי למלא את הפער. הפעולה הזאת עשויה להיות איטית יותר עבור וקטורים גדולים כשמסירים איבר מתחילת הווקטור או מאמצעו, מכיוון שיש להזיז איברים רבים.

לשתי השיטות נדרש שהווקטור יהיה ניתן לשינוי, מכיוון שהן משנות את התוכן שלו. בחרו ב-.pop() כשרוצים להסיר מהסוף, וב-.remove() כשצריך להסיר ממיקום מסוים.

challenge icon

אתגר

קל

תקבל שתי קלטים: הראשון הוא רשימת מספרים מופרדת בפסיקים, והשני הוא אינדקס להסרה. קרא את שני הקלטים, צור וקטור מהמספרים, הסר את האיבר באינדקס שצוין, והדפס את האיברים שנותרו בשורות נפרדות.

דרישות:

  • קרא את הקלט הראשון שמכיל מספרים מופרדים בפסיקים (למשל, 10,20,30,40,50)
  • פצל את המחרוזת לפי פסיקים והמר כל מספר למספר שלם
  • צור וקטור שניתן לשנות מהמספרים האלה
  • קרא את הקלט השני והמר אותו למספר שלם שמייצג את האינדקס
  • השתמש ב-.remove() כדי להסיר את האיבר באינדקס הזה
  • הדפס כל איבר שנותר בשורה נפרדת

קלט:

  • שורה ראשונה: מספרים שלמים מופרדים בפסיקים (למשל, 10,20,30,40,50)
  • שורה שנייה: מספר שלם שמייצג את האינדקס להסרה

פלט: הדפס כל איבר שנותר בווקטור בשורה נפרדת

נסו בעצמכם

use std::io;

fn main() {
    // קראו את המספרים המופרדים בפסיקים
    let mut numbers_input = String::new();
    io::stdin().read_line(&mut numbers_input).expect("Failed to read line");
    
    // קראו את האינדקס של האיבר שיש להסיר
    let mut index_input = String::new();
    io::stdin().read_line(&mut index_input).expect("Failed to read line");
    
    // TODO: כתבו את הקוד שלכם למטה
    // 1. פצלו את numbers_input לפי פסיקים והמירו את הערכים למספרים שלמים
    // 2. צרו וקטור שניתן לשינוי מהמספרים האלה
    // 3. המירו את index_input למספר שלם
    // 4. הסירו את האיבר באינדקס שצוין
    // 5. הדפיסו כל איבר שנותר בשורה נפרדת
    
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר Rust אונליין