RUST: collect

Alpha, Orderly·2025년 8월 22일

RUST

목록 보기
11/11

Rust collect 정리

개요

collect는 Rust의 이터레이터(Iterator) 트레이트에서 제공되는 메서드 중 하나로, 이터레이터를 소비(consume)하여 원하는 컬렉션(Collection) 타입으로 변환하는 기능을 한다.

즉, 반복 가능한 값을 Vec, HashSet, HashMap, String 등으로 한 번에 모아줄 수 있다.


기본 사용법

fn main() {
    let nums = vec![1, 2, 3, 4];

    // Iterator → Vec 변환
    let doubled: Vec<i32> = nums.iter().map(|x| x * 2).collect();
    println!("{:?}", doubled); // [2, 4, 6, 8]
}
  • .map(|x| x * 2) → 이터레이터 생성
  • .collect::<Vec<i32>>() → Vec으로 변환

타입 추론이 가능한 경우 collect()만 써도 된다. 하지만 대부분은 collect::<Vec<_>>()와 같이 **터보 피쉬(::<> 연산자)**를 사용해 타입을 지정해야 한다.


다양한 예시

1. Vec으로 변환

let a: Vec<i32> = (0..5).collect();
// [0, 1, 2, 3, 4]

2. String으로 변환

let chars = vec!['R', 'u', 's', 't'];
let s: String = chars.into_iter().collect();
// "Rust"

3. HashSet으로 변환

use std::collections::HashSet;

let nums = vec![1, 2, 2, 3];
let set: HashSet<i32> = nums.into_iter().collect();
// {1, 2, 3}

4. HashMap으로 변환

use std::collections::HashMap;

let pairs = vec![("a", 1), ("b", 2)];
let map: HashMap<&str, i32> = pairs.into_iter().collect();
// {"a": 1, "b": 2}

특징

  • collect이터레이터를 소비한다 → 한 번 사용하면 원본 이터레이터는 더 이상 사용 불가.
  • 결과 타입을 반드시 지정해야 한다. (Vec, String, HashSet, HashMap 등)
  • Rust의 제네릭 + 트레이트 시스템 덕분에 하나의 collect 메서드로 다양한 타입으로 변환 가능.

요약

  • collect는 이터레이터를 컬렉션으로 변환하는 메서드.
  • 자주 쓰이는 변환: Vec, String, HashSet, HashMap.
  • 결과 타입을 지정하지 않으면 에러 발생 → collect::<Vec<_>>() 형식으로 자주 사용.

Rust 코드에서 데이터를 가공하고 모을 때 가장 많이 쓰이는 메서드 중 하나!

profile
만능 컴덕후 겸 번지 팬

0개의 댓글