Menu
CoddyTech

要素の削除

CoddyのRustジャーニー「論理とフロー」セクションの一部。レッスン 13/66。

ベクターから要素を追加するだけでなく、削除する必要がある場合もあります。Rustには要素を削除するための主な方法が2つあり、それぞれ異なる状況に適しています。

.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

チャレンジ

簡単

入力を2つ受け取ります。1つ目はカンマ区切りの数値のリスト、2つ目は削除するインデックスです。開始コードはすでに両方の入力を読み取り、数値を可変ベクター numbers に変換しています。指定されたインデックスの要素を削除し、残りの要素を1行ずつ出力してください。

要件:

  • 2つ目の入力(index_input)を、インデックスを表す整数に変換する
  • .remove() を使って、そのインデックスの要素を削除する
  • 残りの要素を1行ずつ出力する

入力:

  • 1行目: カンマ区切りの整数(例: 10,20,30,40,50)
  • 2行目: 削除するインデックスを表す整数

出力: ベクターの残りの要素を1行ずつ出力する

自分で試してみよう

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");
    
    // "10,20,30" をベクターに変換する:カンマで分割し、各部分を数値として解析して、Vec にまとめる
    let mut numbers: Vec<i32> = numbers_input
        .trim()
        .split(',')
        .map(|s| s.trim().parse().unwrap())
        .collect();
    
    // TODO: 以下にコードを書く
    // 1. index_input を整数に変換する
    // 2. 指定されたインデックスの要素を削除する
    // 3. 残りの各要素を1行ずつ出力する
    
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理とフローのすべてのレッスン

自分で練習してみよう: Rustオンラインコンパイラ