Rust 配列の操作 iter, cloned, collect, filter, map
概要
- 配列の中身をひとつずつ取り出すには iter() を使う。
- 取り出した結果を新しい配列にまとめるには cloned(), collect() を使う。
- 取り出したい中身を限定するには filter() を使う。
- 取り出した中身に変更を加えるには map() を使う。
プログラム例
- 配列を入力にして、全く同じ配列を出力する。つまりコピー。
- iter().cloned(), collect::<Vec<_>>() を使う。
fn main() { let 配列 = vec![1, 2, 3, 4]; let 配列2 = 配列.iter().cloned() // ひとつずつ中身を並べる .collect::<Vec<_>>(); // それらを集めて配列にする println!("{:?}", 配列2); }
プログラム例2
- 配列を入力にして、0 を取り除いた配列を出力する。
- filter(|&入力変数| bool値) を使う。
fn main() { let 配列 = vec![1, 0, 2, 0, 3, 0, 0, 4]; let 配列2 = 配列.iter().cloned() // ひとつずつ中身を並べる .filter(|&i| i != 0) // 0でないものだけ残す .collect::<Vec<_>>(); // それらを集めて配列にする println!("{:?}", 配列2); }
プログラム例3
- 配列を入力にして、100未満のものは0にした配列を出力する。
- map(|入力変数| 出力する値) を使う。
fn main() { let 配列 = vec![1, 2, 300, 100, 200, 3]; let 配列2 = 配列.iter().cloned() // ひとつずつ中身を並べる .map(|i| { // iを入力にして if i < 100 {0} // 100未満なら0 else {i} // それ以外ならiに変換(マッピング)する }) .collect::<Vec<_>>(); // それらを集めて配列にする println!("{:?}", 配列2); }
プログラム例4
- 1から10の範囲を入力にして、3の倍数をゼロにした配列を出力する。
fn main() { let 配列 = (1..=10) .map(|i| { // iを入力にして if i % 3 == 0 {0} // 3の倍数なら0 else {i} // それ以外ならiに変換(マッピング)する }) .collect::<Vec<_>>(); // それらを集めて配列にする println!("{:?}", 配列); }