ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

Rustの配列操作

大抵の言語で配列やリストだったりを操作することが多いので、新しい言語をやるたびに毎回そこらへんをまず調べるようにしてるのでRustでも調べてみる

ちな過去記事

c#

yuzu441.hateblo.jp

python

yuzu441.hateblo.jp

本題

とりあえずc#でもやった以下の4つを調べる

  • foreach
  • filter
  • map
  • reduce(fold)

foreach

let range = 0..10;
range.for_each(|v| println!("{}", v));
// => 0
// => 1
// => 2
// ~ 以下略 ~

複数行書く場合はfilterの複数行パターン参考にすると書ける

filter

1行で書く場合はこんな感じらしい

let range = 0..10;
let result = range.filter(|v| v % 2 == 0);
for v in result {
    println!("{}", v);
}
// => 0
// => 2
// => 4
// => 6
// => 8

複数行書くときはこう

let range = 0..10;
let result = range.filter(|v| {
  let twice_val = v * 2;
  return twice_val > 10;
});
for v in result {
    println!("{}", v);
}
// => 6
// => 7
// => 8
// => 9

map

let range = 0..10;
let result = range.map(|v| v * 2);
for v in result {
    println!("{}", v);
}
// => 0
// => 2
// => 4
// => 6
// => 8
// => 10
// => 12
// => 14
// => 16
// => 18

reduce(fold)

javascript脳なのでreduceだと思ったけど、foldなんだな

let range = 0..10;
let result = x.fold(0, |acc, v| acc + v);
println!("{}", result);
// => 45

まとめ

公式見ながらやってたんですけど、RustはJavascriptとかと違ってFilterMapとかFlatMapとか色々あって便利でいいな(javascriptだと自分で書くかlodashみたいなの入れないといけない)

doc.rust-lang.org