HashMap

HashDoS κ³΅κ²©μœΌλ‘œλΆ€ν„° λ³΄ν˜Έλ˜λŠ” ν‘œμ€€ ν•΄μ‹œ λ§΅μž…λ‹ˆλ‹€:

use std::collections::HashMap;

fn main() {
    let mut page_counts = HashMap::new();
    page_counts.insert("ν—ˆν΄λ² λ¦¬ ν•€μ˜ λͺ¨ν—˜".to_string(), 207);
    page_counts.insert("κ·Έλ¦Ό 동화".to_string(), 751);
    page_counts.insert("였만과 편견".to_string(), 303);

    if !page_counts.contains_key("레 λ―Έμ œλΌλΈ”") {
        println!(
            "{}의 책은 μ•Œκ³  μžˆμ§€λ§Œ 레 λ―Έμ œλΌλΈ”μ€ μ•Œμ§€ λͺ»ν•©λ‹ˆλ‹€.",
            page_counts.len()
        );
    }

    for book in ["였만과 편견", "μ΄μƒν•œ λ‚˜λΌμ˜ μ•¨λ¦¬μŠ€"] {
        match page_counts.get(book) {
            Some(count) => println!("{book}: {count}νŽ˜μ΄μ§€"),
            None => println!("{book}을(λ₯Ό) μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€."),
        }
    }

    // 값을 찾을 수 μ—†λŠ” 경우 .entry() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 μ‚½μž…ν•©λ‹ˆλ‹€.
    for book in ["였만과 편견", "μ΄μƒν•œ λ‚˜λΌμ˜ μ•¨λ¦¬μŠ€"] {
        let page_count: &mut i32 = page_counts.entry(book.to_string()).or_insert(0);
        *page_count += 1;
    }

    println!("{page_counts:#?}");
}
This slide should take about 10 minutes.
  • HashMap은 prelude에 μ •μ˜λ˜μ–΄ μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λͺ…μ‹œμ μœΌλ‘œ μΆ”κ°€ν•΄μ€˜μ•Ό ν•©λ‹ˆλ‹€.

  • μ•„λž˜ μ½”λ“œλ₯Ό ν…ŒμŠ€νŠΈν•΄λ³΄μ„Έμš”. 첫 λ¬Έμž₯μ—μ„œλŠ” ν•΄μ‹œλ§΅μ— 책이 μžˆλŠ”μ§€ κ²€μ‚¬ν•˜μ—¬, μ—†μœΌλ©΄ λ””ν΄νŠΈ 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€. λ‘λ²ˆ μ§Έ λ¬Έμž₯μ—μ„œλŠ” ν•΄μ‹œλ§΅μ— ν•΄λ‹Ή 책이 μ—†λŠ” 경우, μ§€μ •ν•œ 값을 ν•΄μ‹œλ§΅μ— μΆ”κ°€ν•œ λ’€ κ·Έ 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

    let pc1 = page_counts
        .get("해리 포터와 λ§ˆλ²•μ‚¬μ˜ 돌")
        .unwrap_or(&336);
    let pc2 = page_counts
        .entry("ν—κ±°κ²Œμž„".to_string())
        .or_insert(374);
  • μ•ˆνƒ€κΉμ§€λ§Œ hashmap!같은 λ§€ν¬λ‘œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

    • 러슀트 1.56λΆ€ν„°λŠ” HashMap이 From<[(K, V); N]>을 κ΅¬ν˜„ν•˜κΈ° λ•Œλ¬Έμ— λ°°μ—΄ λ¦¬ν„°λŸ΄μ„ μ΄μš©ν•˜μ—¬ μ‰½κ²Œ ν•΄μ‹œλ§΅μ„ μ΄ˆκΈ°ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

      let page_counts = HashMap::from([
        ("해리 포터와 λ§ˆλ²•μ‚¬μ˜ 돌".to_string(), 336),
        ("ν—κ±°κ²Œμž„".to_string(), 374),
      ]);
  • ν‚€-κ°’ μŒμ— λŒ€ν•œ Iterator둜 ν•΄μ‹œλ§΅μ„ λ§Œλ“€ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

  • 예제 μ½”λ“œμ—μ„œλŠ” νŽΈμ˜μƒ ν•΄μ‹œλ§΅μ˜ ν‚€λ‘œ &strλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ¬Όλ‘  μ»¬λ ‰μ…˜μ— μ°Έμ‘°λ₯Ό μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ μ°Έμ‘°λ₯Ό μ‚¬μš©ν•˜κ²Œ 되면 빌림 검사기 λ•Œλ¬Έμ— λ³΅μž‘ν•΄ 질 수 μžˆμŠ΅λ‹ˆλ‹€.

    • 예제 μ½”λ“œμ—μ„œ to_string()을 없애도 μ»΄νŒŒμΌμ— λ¬Έμ œκ°€ μ—†λŠ”μ§€ ν™•μΈν•΄λ³΄μ„Έμš”. μ–΄λ–€ λ¬Έμ œμ— λΆ€λ”ͺνžκΉŒμš”?
  • ν•΄μ‹œλ§΅μ˜ λͺ‡ λͺ‡ λ©”μ„œλ“œλŠ” ν•΄μ‹œλ§΅ λ‚΄λΆ€μ˜ νŠΉλ³„ν•œ νƒ€μž…(예λ₯Ό λ“€μ–΄ std::collections::hash_map::Keys)듀을 λ¦¬ν„΄ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ νƒ€μž…λ“€μ€ Rust λ¬Έμ„œμ—μ„œλ„ 검색할 수 μžˆμŠ΅λ‹ˆλ‹€. μˆ˜κ°•μƒλ“€μ—κ²Œ 이 νƒ€μž…λ“€μ— λŒ€ν•œ λ¬Έμ„œλ₯Ό 보여주고, 이 λ¬Έμ„œμ— keys λ©”μ„œλ“œλ‘œμ˜ μ—­ 링크가 μžˆμŒμ„ μ•Œλ €μ£Όμ„Έμš”.