【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
リンク