スニペットなどに
さらに良いやり方があれば教えてください
Vector
let v = (b'a'..=b'z').map(|c| c as char)
.collect::<Vec<_>>();
// or
let v = (0..26).map(|x| (x + b'a') as char)
.collect::<Vec<_>>();
// ['a', 'b', .., 'z']
ただしAtCoderではRustのバージョンが低く(Ver 1.15.1)(2019年4月13日 現在)(6月頃に言語アップデートがあるそうです)
b'a'..=b'z'
の文法は使えません
b'a'..b'z'+1
を代わりに使用できます
HashMap (0で初期化)
AtCoder Beginner Contest 098 B問題 など文字ごとの出現数を数えたいときに使えます
let m = (b'a'..=b'z').map(|c| c as char)
.map(|c| (c, 0))
.collect::<HashMap<_, _>>();
// or
let m = (0..26).map(|x| (x + b'a') as char)
.map(|c| (c, 0))
.collect::<HashMap<_, _>>();
// {'a': 0, 'b': 0, .., 'z': 0}
[追記]
@JunSuzukiJapanさん, @vain0xさんのコメントにより一部修正しました
修正箇所は本記事下のコメントを参照ください。
[P.S]
文字列に出てくるある1文字(ここではピリオド)を数える
let cnt_period = s.iter().filter(|ch| **ch == '.').collect::<Vec<_>>().len();
// or
let cnt_period = s.iter().filter(|&c| *c == '.').count();