해시 맵 작업

완료됨

Rust의 또 다른 일반적인 컬렉션 형식은 해시 맵입니다. HashMap<K, V> 형식은 각 키 K를 그 값 V와 매핑하여 데이터를 저장합니다. 벡터의 데이터에는 정수 인덱스를 사용하여 액세스하고, 해시 맵의 데이터에는 키를 사용하여 액세스합니다.

해시 맵 형식은 개체, 해시 테이블 및 사전과 같은 데이터 항목에 대한 많은 프로그래밍 언어에서 사용됩니다.

벡터처럼 해시 맵도 증가할 수 있습니다. 데이터는 힙에 저장되고 해시 맵 항목에 대한 액세스는 런타임에 확인됩니다.

해시 맵 정의

다음 예제에서는 책 검토를 추적하는 해시 맵을 정의합니다. 해시 맵 키는 책 이름이고 값은 독자 리뷰입니다.

use std::collections::HashMap;
let mut reviews: HashMap<String, String> = HashMap::new();

reviews.insert(String::from("Ancient Roman History"), String::from("Very accurate."));
reviews.insert(String::from("Cooking with Rhubarb"), String::from("Sweet recipes."));
reviews.insert(String::from("Programming in Rust"), String::from("Great examples."));

이 코드를 좀 더 자세히 살펴보겠습니다. 첫 번째 줄에 새 형식의 구문이 표시됩니다.

use std::collections::HashMap;

use 명령은 Rust 표준 라이브러리의 collections 부분에서 HashMap 정의를 가져와 프로그램 범위에 넣습니다. 이 구문은 다른 프로그래밍 언어에서 가져오기라고 하는 것과 유사합니다.

HashMap::new 메서드를 사용하여 빈 해시 맵을 만듭니다. 필요에 따라 키 및 값을 추가하거나 제거할 수 있도록 reviews 변수를 변경 가능으로 선언합니다. 이 예제에서는 해시 맵 키와 값 모두 String 형식을 사용합니다.

let mut reviews: HashMap<String, String> = HashMap::new();

키-값 쌍 추가

insert(<key>, <value>) 메서드를 사용하여 해시 맵에 요소를 추가합니다. 코드에서 구문은 <hash_map_name>.insert()입니다.

reviews.insert(String::from("Ancient Roman History"), String::from("Very accurate."));

키 값 얻기

해시 맵에 데이터를 추가한 후에는 get(<key>) 메서드를 사용하여 키에 대한 특정 값을 가져올 수 있습니다.

// Look for a specific review
let book: &str = "Programming in Rust";
println!("\nReview for \'{}\': {:?}", book, reviews.get(book));

출력은 다음과 같습니다.

Review for 'Programming in Rust': Some("Great examples.")

참고

출력에는 책 리뷰가 “Great examples”가 아닌 "Some("Great examples")"로 표시됩니다. get 메서드는 Option<&Value> 형식을 반환하기 때문에 Rust는 메서드 호출의 결과를 “Some()” 표기법으로 래핑합니다.

키-값 쌍 제거

.remove() 메서드를 사용하여 해시 맵에서 항목을 제거할 수 있습니다. 잘못된 해시 맵 키에 get 메서드를 사용하면 get 메서드에서 ‘None’을 반환합니다.

// Remove book review
let obsolete: &str = "Ancient Roman History";
println!("\n'{}\' removed.", obsolete);
reviews.remove(obsolete);

// Confirm book review removed
println!("\nReview for \'{}\': {:?}", obsolete, reviews.get(obsolete));

출력은 다음과 같습니다.

'Ancient Roman History' removed.
Review for 'Ancient Roman History': None

이 코드를 사용해보고 이 Rust Playground에서 해시 맵 작업을 할 수 있습니다.

지식 점검

다음 질문에 대답하여 배운 내용을 확인하세요. 각 질문에 대해 하나의 대답을 선택한 다음, 답변 확인을 선택합니다.

1.

사람의 이름을 전화 번호에 연결한 주소록을 나타내는 데 가장 적합한 데이터 형식은 무엇인가요?

2.

해시 맵 요소를 추가하고 삭제하는 데 사용할 수 있는 표준 메서드는 무엇인가요?