Menu
Coddy logo textTech

향상된 for 루프

Coddy Rust 여정의 Fundamentals 섹션에 포함된 레슨. 75개 중 66번째.

배열을 순회하는 방법에는 여러 가지가 있습니다. 그중 몇 가지를 소개합니다:
다음 배열을 고려해 보세요:

let numbers = [1, 2, 3, 4, 5];
  • Direct Iterator:

    for num in numbers.iter() {}
    // 값: 1, 2, 3, 4, 5
  • Index & Value:

    for (index, value) in numbers.iter().enumerate() { }
    // 값: (0,1), (1,2), (2,3), (3,4), (4,5)
  • 특정 크기의 슬라이스:

    for chunk in numbers.chunks(2) { }
    // 값: [1,2], [3,4], [5]

    각 chunk는 슬라이스이므로, 해당 슬라이스에 슬라이스 메서드를 사용할 수 있습니다. 예를 들어, chunk.len()은 해당 chunk에 얼마나 많은 요소가 있는지 반환합니다. 배열이 딱 나누어떨어지지 않으면 마지막 chunk는 더 작을 수 있습니다.

.chunks().enumerate()를 체이닝하여 인덱스와 `chunk`를 동시에 얻을 수도 있습니다:

for (i, chunk) in numbers.chunks(2).enumerate() { }
// 값: (0,[1,2]), (1,[3,4]), (2,[5])

여기서 .chunks(2)가 슬라이스를 먼저 생성한 다음, .enumerate()가 각 카운터로 감싸게 됩니다. 따라서 i는 `chunk` 인덱스이고 chunk는 슬라이스입니다.

  • Iterate with mutation:

    for num in numbers.iter_mut() { 
    	*num *= 2;
    }
    // 배열이 됩니다: [2, 4, 6, 8, 10]
challenge icon

챌린지

쉬움

상품과 가격이 포함된 쇼핑 목록을 처리하고 데이터의 다양한 뷰를 제공하는 프로그램을 작성하세요.

프로그램은 다음을 수행해야 합니다:

  1. 각 항목 번호와 가격을 출력합니다 (enumerate 사용). Item N: $Price 형식을 사용하세요 (예: Item 1: $2.75).
  2. 가격을 짝을 지어(chunks 사용) "묶음 상품"으로 출력합니다. 묶음에 항목이 2개인 경우 합계를 출력합니다: Bundle N: $Price1 + $Price2 = $Sum. 항목이 1개만 있는 경우 다음과 같이 출력합니다: Bundle N: $Price.
  3. 모든 가격에 10% 할인을 적용합니다 (iter_mut 사용).
  4. 최종 할인된 가격을 각각 새 줄에 소수점 2자리까지 서식 지정하여 출력합니다 (예: $2.48).

Hint: 이터레이터를 함께 체이닝할 수 있습니다 — 예를 들어, prices.chunks(2).enumerate()를 사용하면 청크 인덱스와 청크 슬라이스를 동시에 얻을 수 있습니다. 각 chunk는 슬라이스이므로 chunk.len()을 호출하거나 chunk[0], chunk[1] 등으로 인덱싱할 수 있습니다.

Expected output format for prices:
가격을 소수점 2자리까지 서식 지정하려면 ${:.2}를 사용하세요.

정확한 텍스트는 Bundle 4: $7.90입니다.

직접 해보기

fn main() {
    let mut prices = [2.75, 1.50, 5.00, 3.5, 4.1, 2.25, 7.9];

    println!("Original Prices:");
    // TODO: enumerate()를 사용해 각 항목 번호와 가격을 출력하세요
    // Hint: prices.iter().enumerate()는 (index, &price) 쌍을 제공합니다
    // {:.2}를 사용해 가격을 소수점 2자리로 포맷하세요. 정확한 형식은 지침을 참조하세요


    println!("\nBundle Deals:");
    // TODO: chunks(2)와 enumerate()를 함께 연결하세요: prices.chunks(2).enumerate()
    // 이것은 (index, chunk) 쌍을 제공하며, 각 chunk는 슬라이스이므로 chunk.len()이 크기를 알려줍니다
    // If chunk.len() == 2, print: "Bundle 1: $2.75 + $1.50 = $4.25"
    // chunk.len() == 1인 경우, 지침에 설명된 단일 항목 줄을 출력하세요
    // {:.2}를 사용해 모든 가격을 소수점 2자리로 포맷하세요


    // TODO: iter_mut()를 사용해 모든 가격에 10% 할인을 적용하세요
    // Hint: 각 *price에 0.9를 곱하세요


    println!("\nPrices after 10% discount:");
    // TODO: 할인된 각 가격을 소수점 2자리로 포맷하여 출력하세요
    // 예상 출력 형식은 지침에 나와 있습니다

}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Fundamentals의 모든 레슨

직접 연습해 보세요: 온라인 Rust 컴파일러