Cover Image for [Boot camp for Beginners] B - Collecting Balls (Easy Version) [Rust]

[Boot camp for Beginners] B - Collecting Balls (Easy Version) [Rust]

概要

AtCoder Problems: Boot camp for Beginners をRustで解いてみる

学んだことmemo

  • iter の fold で TypeScript の reduce 的なことができる
    • rust にも reduce があるが、初期値を取らないので Option 型になってしまう
    • fold は必ず初期値を取るので初期値の型で返ってくる
  • それ以外に学ぶことがなかったので、iterの便利そうなメソッドをまとめる
  • chain
    • iter を連結できる
  • zip
    • iter を合成できる
    • 逆の操作をする unzip もある
  • filter / map
    • 他の言語でもよくあるので割愛
  • filter_map
    • map した上で Option になる場合、Someのものだけに filter してくれる
    • Option がある言語はこれがあるかないかで大きく使い勝手が違うのでとても大事
  • enumerate
    • 添字付きで iter にしてくれる
    • 稀によく使う
  • scan
    • fold はiterの全ての要素を使って1つの結果に収斂させるが、scan はそれまでの要素から得られたなんらかの値を持って、iterの1要素を変換した iterが得られる
    • 言葉で説明するのがとても難しいが使い所はありそう
  • flat_map
    • mapした結果が iter だった場合に、入れ子にせずに連結してくれる
  • flatten
    • すでに入れ子になっているiterを連結した状態にしてくれる
  • inspect
    • iterを変更せずに覗き見できる
    • メソッドチェーンが長くなった時に途中で確認するとかに使える
  • partition
    • 条件を指定して、iter を2つに分けることができる
    • 使い所はありそう
  • all
    • 全ての要素が条件に一致したらtrue
  • any
    • いずれか1つでも条件に一致したらtrue
    • rustでは some ではないらしい
  • find
    • 条件に一致するものを見つける
  • max / max_by / max_by_key
    • 最大値を求める
    • _by の方で条件式を書ける
    • _by_key の方で構造体の時でも使える
    • min の方にも同じものがある