アレ? 案外無いの? 文字列の反転 @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, "語本日");

もう少しすっきりする方法が無いものかという気分ですが、マクロなり関数なりを作った方が良いのでしょうね。

この記事が気に入ったらサポートをしてみませんか?