Menu
Coddy logo textTech

향상된 for 루프

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

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

let numbers = [1, 2, 3, 4, 5];
  • 직접 이터레이터:

    for num in numbers.iter() {}
    // 값: 1, 2, 3, 4, 5
  • 인덱스 및 값:

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

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

    각 chunk는 slice이므로, 그에 대한 slice 메서드를 사용할 수 있습니다 — 예를 들어, chunk.len()은 해당 chunk에 얼마나 많은 요소가 있는지 반환합니다. 배열이 균등하게 나누어지지 않으면 마지막 chunk는 더 작을 수 있습니다.

또한 .chunks() 뒤에 .enumerate()를 체이닝하여 인덱스와 청크를 동시에 얻을 수 있습니다:

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

여기서 .chunks(2)가 슬라이스를 먼저 생성한 다음, .enumerate()가 각각을 카운터로 감쌉니다. 따라서 i는 청크 인덱스이고 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. iter_mut를 사용하여 모든 가격에 10% 할인을 적용합니다.
  4. 최종 할인된 가격을 각각 새 줄에 소수점 2자리로 포맷하여 출력합니다 (예: $2.48).

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

Expected output format for prices:
가격의 소수점 2자리 포맷팅에는 ${:.2}를 사용하세요.

직접 해보기

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

    println!("Original Prices:");
    // TODO: enumerate()를 사용해 각 항목 번호와 가격을 출력하세요
    // 힌트: prices.iter().enumerate()는 (index, &price) 쌍을 제공합니다
    // {:.2}를 사용해 가격을 소수점 2자리로 포맷하세요 — 예: "Item 1: $2.75"


    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이면 출력: "Bundle 4: $7.90"
    // {:.2}를 사용해 모든 가격을 소수점 2자리로 포맷하세요


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


    println!("\nPrices after 10% discount:");
    // TODO: 할인된 각 가격을 소수점 2자리로 포맷하여 출력하세요
    // 예상: "$2.48" 등.

}
quiz icon실력 점검

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

Fundamentals의 모든 레슨