향상된 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]
챌린지
쉬움항목과 해당 가격이 포함된 쇼핑 목록을 처리하고 데이터의 다양한 뷰를 제공하는 프로그램을 작성하세요.
프로그램은 다음을 수행해야 합니다:
enumerate를 사용하여 각 항목 번호와 가격을 출력합니다.Item N: $Price형식으로 포맷팅하세요 (예:Item 1: $2.75).chunks를 사용하여 가격을 번들 딜로 쌍을 이루어 출력합니다. 번들에 2개 항목이 있는 경우 합계를 출력합니다:Bundle N: $Price1 + $Price2 = $Sum. 1개 항목만 있는 경우 다음을 출력합니다:Bundle N: $Price.iter_mut를 사용하여 모든 가격에 10% 할인을 적용합니다.- 최종 할인된 가격을 각각 새 줄에 소수점 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" 등.
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.