8장. 컬렉션

Gillilab - TechLog·2024년 11월 17일

Rust

목록 보기
9/21

8장. 컬렉션

Rust의 컬렉션은 데이터를 저장하고 조작하는 데 사용되는 데이터 구조입니다. Rust 표준 라이브러리는 여러 가지 컬렉션 타입을 제공합니다. 가장 일반적인 컬렉션은 Vec, String, HashMap입니다.

벡터 (Vec)

벡터는 가변 길이의 순차적인 데이터 구조입니다. 벡터는 Vec<T> 타입으로 정의되며, T는 벡터에 저장될 요소의 타입입니다.

벡터 생성 및 사용 예제

fn main() {
    // 빈 벡터 생성
    let mut v: Vec<i32> = Vec::new();

    // 초기값을 가진 벡터 생성
    let v2 = vec![1, 2, 3, 4, 5];

    // 벡터에 값 추가
    v.push(10);
    v.push(20);

    // 벡터 값 접근
    let third = &v2[2];
    println!("The third element is {}", third);

    // 벡터 값 반복
    for i in &v2 {
        println!("{}", i);
    }

    // 벡터 값 변경
    for i in &mut v {
        *i += 50;
    }

    for i in &v {
        println!("{}", i);
    }
}

문자열 (String)

Rust의 문자열은 UTF-8 인코딩된 가변 길이의 텍스트 데이터입니다. 문자열은 String 타입으로 정의됩니다.

문자열 생성 및 사용 예제

fn main() {
    // 빈 문자열 생성
    let mut s = String::new();

    // 초기값을 가진 문자열 생성
    let s2 = String::from("Hello, world!");

    // 문자열에 값 추가
    s.push_str("Hello");
    s.push(' ');

    // 문자열 연결
    let s3 = s + &s2;
    println!("{}", s3);

    // 문자열 반복
    for c in s2.chars() {
        println!("{}", c);
    }

    // 문자열 길이
    println!("Length of s2: {}", s2.len());
}

해시맵 (HashMap)

해시맵은 키-값 쌍을 저장하는 데이터 구조입니다. 해시맵은 HashMap<K, V> 타입으로 정의되며, K는 키의 타입, V는 값의 타입입니다.

해시맵 생성 및 사용 예제

use std::collections::HashMap;

fn main() {
    // 빈 해시맵 생성
    let mut scores = HashMap::new();

    // 해시맵에 값 추가
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);

    // 해시맵 값 접근
    let team_name = String::from("Blue");
    let score = scores.get(&team_name);
    match score {
        Some(&score) => println!("Score of {}: {}", team_name, score),
        None => println!("No score found for {}", team_name),
    }

    // 해시맵 값 반복
    for (key, value) in &scores {
        println!("{}: {}", key, value);
    }

    // 해시맵 값 변경
    scores.insert(String::from("Blue"), 25);
    println!("{:?}", scores);
}

컬렉션 요약

Rust의 컬렉션을 사용하면 데이터를 효율적으로 저장하고 조작할 수 있습니다. 각 컬렉션 타입은 특정한 용도에 맞게 설계되어 있으며, 다양한 상황에서 유용하게 사용할 수 있습니다.

  • Vec
    • 벡터 생성
      • 예제: let mut numbers = Vec::new();
    • 갱신
      • 예제: numbers.push(5);
    • 요소 읽기
      • 예제: let first = &numbers[0];
    • 반복처리
      • 예제: for number in &numbers { println!("{}", number); }
  • String
    • 문자열 생성
      • 예제: let mut greeting = String::from("안녕하세요");
    • 갱신
      • 예제: greeting.push_str(", 반갑습니다!");
    • 인덱싱
      • 예제: let first_char = &greeting[0..3];
  • HashMap<K, V>
    • 해시맵 생성
      • 예제: let mut scores = HashMap::new();
    • 접근과 갱신
      • 예제: scores.insert("팀 A", 10);
      • 예제: let score = scores.get("팀 A").unwrap();
    • 해시맵과 소유권
      • 예제: let team = String::from("팀 B"); scores.insert(team, 20); // team은 이제 해시맵에 소유권을 넘김

0개의 댓글