アレ? 案外無いの? 文字列の反転 @Rust
Rust100本ノック中の気づきみたいなモノです。
たとえば"abc"を"cba"にするような変換ですが、String::reverseでもないかと思ったら案外無かったり。
んじゃ、どうしようかと言うことで少し分解して考えたらこうなるわけで…
1. 文字単位で分解する
2. 分解したモノを反転してくっつける
前者については、String::chars()というものがあり、イテレータとして機能するということでした。
後者についてはイテレーターで得られたモノを逆に取得できるようになるRevイテレータが生成できるrev()を通し、それらを寄せ集めて任意の型に変換を試みるcollect()という組み合わせになります。
let x = "日本語";
let y: String = x.chars().rev().collect(); // 型がわかればcollectはそれを利用
let z = x.chars().rev.collect::<String>(); // 型推定ができないのでcollectに教える感
assert_eq!(y, "語本日");
assert_eq!(z, "語本日");
もう少しすっきりする方法が無いものかという気分ですが、マクロなり関数なりを作った方が良いのでしょうね。
この記事が気に入ったらサポートをしてみませんか?