Vec::swap_remove
メソッドは要素を素早く削除できる。
Vec::remove
メソッドは指定したインデックスの要素を削除する。ただし、このメソッドは時間がかかる場合がある。なぜなら、内部配列から指定した要素を削除するには、その後続の要素を全て一つずつずらしてから、内部配列を縮小する必要がある。
Vec::remove
のイメージ
そこで、順序が適当でよい場合に限り、削除する要素と最後の要素を交換してから、内部配列を縮小する方法がよく使われる。Vec::swap_remove
はまさにこれを行う。
Vec::swap_remove
のイメージ以下は Rustdoc の Examples からの引用。
fn main() {
let mut v = vec!["foo", "bar", "baz", "qux"];
assert_eq!(v.swap_remove(1), "bar");
assert_eq!(v, ["foo", "qux", "baz"]);
assert_eq!(v.swap_remove(0), "foo");
assert_eq!(v, ["baz", "qux"]);
}