해시 맵 순회하기
Coddy Rust 여정의 논리와 흐름 섹션에 포함된 레슨. 66개 중 31번째.
때로는 특정 키를 조회하는 대신 해시 맵의 모든 키-값 쌍을 살펴봐야 합니다. Rust는 for 루프를 사용하여 모든 데이터를 순회하는 간단한 방법을 제공합니다.
for (key, value) in &my_map {
println!("{}: {}", key, value);
}my_map 앞의 &에 주목하세요. 이는 해시 맵에 대한 참조를 생성하므로 소유권을 가져오지 않고 반복할 수 있습니다. 이 루프는 각 키-값 쌍을 튜플로 제공하며, 루프 선언에서 직접 구조 분해할 수 있습니다.
가격 목록을 사용한 실용적인 예시는 다음과 같습니다:
let mut prices = HashMap::new();
prices.insert("apple", 1.20);
prices.insert("banana", 0.80);
for (item, price) in &prices {
println!("{} costs ${:.2}", item, price);
}기억해야 할 중요한 세부 사항이 하나 있습니다. 해시 맵은 특정한 반복 순서를 보장하지 않습니다. 프로그램을 실행할 때마다 pairs가 다른 순서로 나올 수 있습니다. 이는 해시 맵이 삽입 순서를 유지하는 것보다 빠른 조회를 우선하기 때문이므로, 반복할 때 item이 특정한 순서로 나타날 것이라고 기대하지 마세요.
챌린지
쉬움처리할 student-score 쌍의 수를 나타내는 정수 n을 입력으로 받습니다. 그런 다음 n개의 입력 쌍을 받습니다. 각 쌍은 student name에 이어 test score(정수)로 구성됩니다. student names를 키로, scores를 값으로 저장할 hash map을 생성합니다. 모든 쌍을 삽입한 후 hash map을 순회하며 각 student's name과 score를 출력합니다.
요구 사항:
std::collections에서HashMap을 가져옵니다- 유형이
HashMap<String, i32>인 mutable hash map을 생성합니다 - 첫 번째 입력을 읽고
i32로 변환하여 쌍의 수를 얻습니다 - loop를 사용하여
n개의 입력 쌍(student name, 그다음 score)을 읽습니다 - 각 student name과 score를 hash map에 삽입합니다
forloop를 사용하여&map으로 hash map을 순회합니다- 각 student's information을
[name]: [score]형식으로 출력합니다 - 쌍은 어떤 순서로든 출력할 수 있습니다(hash map은 순서를 보장하지 않음)
입력:
- 첫 번째 줄: 정수
n(예:3) - 다음
n개의 줄 쌍:- Student name(예:
Alice) - 정수로 표현된 test score(예:
95)
- Student name(예:
출력:
- 각 student에 대해 한 줄씩
[name]: [score]형식으로 출력합니다 - 출력 줄의 순서는 테스트 실행마다 달라질 수 있습니다
직접 해보기
use std::collections::HashMap;
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// 학생-점수 쌍의 개수를 읽습니다
let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
// 학생 이름과 점수를 저장할 가변 해시 맵을 생성합니다
let mut students: HashMap<String, i32> = HashMap::new();
// TODO: 아래에 코드를 작성하세요
// n개의 입력 쌍(학생 이름과 점수)을 읽고 해시 맵에 삽입합니다
// TODO: 해시 맵을 순회하며 각 학생의 이름과 점수를 출력합니다
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 Rust 컴파일러