【Rust】ベクタ型からHashSetを作る
RustでAtCoder ABC225のA - Distinct Stringsを解くにあたり,
ベクタ型からHashSetを作る方法について調べたので,こちらにメモを残しておきます.
方法
Iterator型のfrom_iterを使用することで,ベクタ型からHashSetを作成できます.
from_iterを使うには,std::iter::FromIteratorトレイトを使用します.
use std::collections::HashSet; use std::iter::FromIterator; fn main() { let v: Vec<u32> = vec![2, 3, 5, 7]; let set: HashSet<u32> = HashSet::from_iter(v.iter().cloned()); println!("{:?}", set); // {5, 2, 3, 7} }
もしくは,collectを用いることでも変換可能です.
collectを用いることで,Iteratorオブジェクトを目的のオブジェクトに集めることができます.
collections::HashSet; fn main() { let v: Vec<u32> = vec![2, 3, 5, 7]; let set: HashSet<u32> = v.iter().cloned().collect(); println!("{:?}", set); // {5, 2, 3, 7} }
A - Distinct Stringsの解法
use proconio::{ input, marker::{Bytes, Chars}, }; use std::collections::HashSet; use std::iter::FromIterator; fn main() { input! { s: Chars, }; let set: HashSet<char> = HashSet::from_iter(s.iter().cloned()); if set.len() == 1 { println!("1"); } else if set.len() == 2 { println!("3"); } else { println!("6"); } }
参考
- Build HashSet from a vector in Rust - Stack Overflow
- FromIterator in std::iter - Rust
- A - Distinct Strings
リンク