拡張と縮小
要素を挿入、削除、サイズ変更します。
「拡張と縮小」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。
ベクターはサイズを変更できる
ベクターの重要な特徴は、実行時にサイズを変更できることです。データが増えたら要素を追加し、不要になったら削除できます。
サイズを変更するには、ベクターをmutで宣言する必要があります。
pushによる拡張
pushメソッドは末尾に1つの要素を追加し、ベクターのサイズを1増やします。最も一般的な拡張方法です。
下の例では、ベクターの長さが0から3になります。
fn main() {
let mut v = Vec::new();
v.push("a");
v.push("b");
v.push("c");
println!("len = {}", v.len());
}popによる削除
popメソッドは最後の要素を削除し、Optionに包んで返します。通常はSome(value)が返り、ベクターがすでに空ならNoneが返ります。
これにより、ベクターのサイズが1減ります。
fn main() {
let mut v = vec![1, 2, 3];
let last = v.pop();
println!("popped {:?}", last);
println!("now {:?}", v);
}中央への挿入
insertメソッドは指定したインデックスに値を置き、それ以降の要素を右へ移動します。インデックスは0以上、現在の長さ以下でなければなりません。
ここでは位置1に99を挿入します。
fn main() {
let mut v = vec![10, 20, 30];
v.insert(1, 99);
println!("{:?}", v);
}インデックスによる削除
removeメソッドは、指定したインデックスの要素を削除して返し、後続の要素を左に移動して空きを埋めます。
注意:存在しないインデックスを削除しようとするとパニックになります。
fn main() {
let mut v = vec![10, 20, 30];
let gone = v.remove(0);
println!("removed {}", gone);
println!("{:?}", v);
}swap_removeによる高速な削除
順序が重要でない場合は、swap_removeのほうが高速です。すべての要素を移動する代わりに、最後の要素を削除した位置へ移動します。
順序は変わりますが、要素を移動するコストを避けられます。
fn main() {
let mut v = vec![1, 2, 3, 4];
let x = v.swap_remove(0);
println!("took {}", x);
println!("{:?}", v);
}すべての要素を削除する
clearメソッドは、すべての要素を一度に削除し、長さ0の空のベクタにします。再利用できるように、確保済みの容量は保持されます。
ベクタを空にして最初から値を入れ直したい場合に便利です。
fn main() {
let mut v = vec![1, 2, 3];
v.clear();
println!("empty? {}", v.is_empty());
}指定した長さに切り詰める
truncateメソッドは、末尾の余分な要素を削除して、ベクタを指定した長さに短くします。ベクタがすでにそれより短い場合は何も起こりません。
ここでは最初の2要素だけを残します。
fn main() {
let mut v = vec![1, 2, 3, 4, 5];
v.truncate(2);
println!("{:?}", v);
}extendで結合する
extendメソッドは、別のコレクションに含まれるすべての要素を追加します。各要素に対してpushを1回ずつ呼び出す処理を、1回で行うようなものです。
以下では、2番目のリストを最初のリストの末尾に追加しています。
fn main() {
let mut v = vec![1, 2];
v.extend(vec![3, 4, 5]);
println!("{:?}", v);
}retainで一部の要素だけを残す
retainメソッドは、条件を満たす要素だけを残し、それ以外をその場で削除します。boolを返すクロージャを渡します。
ここでは偶数だけを残します。
fn main() {
let mut v = vec![1, 2, 3, 4, 5, 6];
v.retain(|n| n % 2 == 0);
println!("{:?}", v);
}要素をソートする
sortメソッドは、要素をその場で小さい順に並べ替えます。長さは変わらず、並び順だけが変わります。
ソートするには、ベクタがmutでなければなりません。
fn main() {
let mut v = vec![3, 1, 4, 1, 5];
v.sort();
println!("{:?}", v);
}理解度チェック
ベクタの要素を増減する方法について、理解度を確認しましょう。
まとめ
push、insert、extendでベクタを拡張し、pop、remove、swap_remove、clear、truncateで縮小しました。
retainで要素を絞り込み、sortで順序を整える方法も学びました。次は、ベクタの中に構造体を格納します。
よくある質問
「拡張と縮小」レッスンは無料ですか?
はい。「拡張と縮小」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。
「拡張と縮小」で何を学びますか?
要素を挿入、削除、サイズ変更します。 ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn Rust Codingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「拡張と縮小」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn Rust Codingレッスンでコードを書いて実行できますか?
はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。