RCIE-ジャンクのコード屋

主に自分のためにコーディングのTIPSを蓄積しています。

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!("{:?}", 配列);
}