yiskw note

機械学習やプログラミングについて気まぐれで書きます

【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");
    }
}

参考