LoginSignup
2
2

More than 3 years have passed since last update.

Rust Vector alphabet を簡潔に初期化 🐒

Last updated at Posted at 2019-04-08

スニペットなどに
さらに良いやり方があれば教えてください:metal:

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();

参考
stack overflow
rosettacode.org

2
2
8

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2