Rustの配列操作
大抵の言語で配列やリストだったりを操作することが多いので、新しい言語をやるたびに毎回そこらへんをまず調べるようにしてるのでRustでも調べてみる
ちな過去記事
本題
とりあえず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みたいなの入れないといけない)