향상된 for 루프
Coddy Rust 여정의 기초 섹션에 포함된 레슨. 75개 중 66번째.
배열을 순회하는 방법에는 여러 가지가 있습니다. 그중 몇 가지를 살펴보겠습니다.
다음 배열을 생각해 보세요:
let numbers = [1, 2, 3, 4, 5];직접 반복자:
for num in numbers.iter() {} // 값: 1, 2, 3, 4, 5
index & 값:
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는 더 작을 수 있습니다.
.enumerate()를 .chunks()에 연결하여 index와 chunk를 동시에 가져올 수도 있습니다:
for (i, chunk) in numbers.chunks(2).enumerate() { }
// 값: (0,[1,2]), (1,[3,4]), (2,[5])여기서 .chunks(2)는 먼저 슬라이스를 produces한 다음, .enumerate()가 각 슬라이스를 카운터와 함께 감쌉니다. 따라서 i는 chunk index이고 chunk는 슬라이스입니다.
변경하며 반복하기:
for num in numbers.iter_mut() { *num *= 2; } // 배열이 됩니다: [2, 4, 6, 8, 10]
챌린지
쉬움항목과 가격이 포함된 쇼핑 목록을 처리하고 데이터에 대한 다양한 보기를 제공하는 프로그램을 작성하세요.
프로그램은 다음을 수행해야 합니다.
- 각 항목 번호와 가격을 출력하세요(
enumerate사용).Item N: $Price형식으로 지정합니다(예:Item 1: $2.75). - 가격을 쌍으로 출력하세요(
chunks사용). 이를 "bundle deals"로 출력합니다. bundle에 항목이 2개 있으면 합계를 출력합니다:Bundle N: $Price1 + $Price2 = $Sum. 항목이 1개만 있으면 다음을 출력합니다:Bundle N: $Price. - 모든 가격에 10% 할인을 적용하세요(
iter_mut사용). - 최종 할인 가격을 각각 새 줄에 출력하고, 소수점 이하 2자리 형식으로 지정하세요(예:
$2.48).
Hint: iterator를 서로 연결할 수 있습니다. 예를 들어 prices.chunks(2).enumerate()는 chunk 인덱스와 chunk 슬라이스를 한 번에 제공합니다. 각 chunk는 슬라이스이므로 chunk.len()을 호출하고 chunk[0], chunk[1] 등으로 인덱싱할 수 있습니다.
가격의 Expected output 형식:${:.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: Use iter_mut() to apply a 10% discount to all prices
// Hint: 각 *price에 0.9를 곱하세요
println!("\nPrices after 10% discount:");
// TODO: 할인된 각 가격을 소수점 2자리로 형식화하여 출력하세요
// 예상 출력 형식은 지침에 나와 있습니다
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
직접 연습해 보세요: 온라인 Rust 컴파일러