Thinking Different




Hashmap (해쉬맵)

키(Key)와 값(Value) 두 쌍으로 데이터를 보관하는 자료구조입니다. 키는 중복될 수 없으며, 값은 중복 가능합니다.

저장 능력은 다소 느리나 키 값을 해싱하여 저장하기 때문에 키값의 고속 검색이 가능하여, 데이터의 빠른 접근이 필요한 경우 사용됩니다. 해쉬맵은 데이터 정렬을 보장하지 않습니다.

 

해쉬맵을 사용하기 위해서는 해쉬맵 사용에 필요한 컨테이너를 use로 사용가능하도록 하여야 합니다.

use std::collections::HashMap;

 

 

해쉬맵 생성하기

use std::collections::HashMap;

fn main()
{
    // 해쉬맵 생성
    let mut hashmap = HashMap::new();
}

 

 

데이터 추가하기 (키값, 데이터) 

use std::collections::HashMap;

fn main()
{
    // (i32, String) 타입의 해시맵
    let mut hashmap = HashMap::new();
    
    // 값 추가하기 insert()
    hashmap.insert(10, String::from("열"));
    hashmap.insert(25, String::from("스물다섯"));
}

 

 

해시값 출력하기 (1)

use std::collections::HashMap;

fn main()
{
    let mut hashmap = HashMap::new();
    
    hashmap.insert(1, String::from("하나"));
    hashmap.insert(2, String::from("둘"));
    hashmap.insert(3, String::from("셋"));
    
    println!("{:?}", hashmap);
}

// 출력 결과
{3: "셋", 1: "하나", 2: "둘"}

// 결과값은 정렬을 보장하지 않으므로 컴파일때마다 바뀔 수 있음

 

 

해시값 출력하기 (2) for문을 활용한 key , value 출력하기

use std::collections::HashMap;

fn main()
{
    let mut hashmap = HashMap::new();
    
    hashmap.insert(1, String::from("하나"));
    hashmap.insert(2, String::from("둘"));
    hashmap.insert(3, String::from("셋"));
    
    for (k, v) in hashmap
    {
        println!("{}, {}", k, v);
    }
}

// 출력 결과
1, 하나
2, 둘
3, 셋

 

 

 

데이터 값 갱신하기 (덮어쓰기)

use std::collections::HashMap;

fn main()
{
    // (i32, String) 타입의 해시맵
    let mut hashmap = HashMap::new();
    
    // 값 추가하기 insert()
    hashmap.insert(10, String::from("열"));
    hashmap.insert(25, String::from("스물다섯"));
    
    // 값 갱신하기 (이미 존재하는 key의 value를 수정)
    hashmap.insert(10, String::from("TEN"));
}

 

 

entry를 활용한 데이터 추가하기

entry 를 활용하면 해시맵에 저장할 키값이 있는지 확인하고 없으면 추가하여 entry로 반환하는 기능입니다.

use std::collections::HashMap;

fn main()
{
    let mut hashmap = HashMap::new();
    
    // 있는지 확인하고 없으면 추가 .or_insert()
    hashmap.entry(10).or_insert(String::from("TEN"));
    hashmap.entry(50).or_insert(String::from("오십"));
    hashmap.entry(35).or_insert(String::from("삼십오"));
}

 

 

해쉬맵에 저장된 특정 키의 데이터 얻어오기

use std::collections::HashMap;

fn main()
{
    let mut hashmap = HashMap::new();
    
    hashmap.insert(1, String::from("하나"));
    hashmap.insert(2, String::from("둘"));
    hashmap.insert(3, String::from("셋"));
    
    // 키값 1에 저장된 value 읽기
    println!("{}", hashmap[&1]);
    
    // 키값 2에 저장된 value Option<T> 형식으로 읽어오기
    println!("{:?}", hashmap.get(&2));
}


// 출력 결과
하나
Some("둘")