Ulepszona pętla for
Część sekcji Podstawy ścieżki Rust w Coddy. Lekcja 66 z 75.
Istnieją różne sposoby iterowania po tablicy. Oto niektóre z nich:
Rozważ następującą tablicę:
let numbers = [1, 2, 3, 4, 5];Iterator bezpośredni:
for num in numbers.iter() {} // Wartości: 1, 2, 3, 4, 5
Indeks & wartość:
for (index, value) in numbers.iter().enumerate() { } // Wartości: (0,1), (1,2), (2,3), (3,4), (4,5)
Wycinki o określonym rozmiarze:
for chunk in numbers.chunks(2) { } // Wartości: [1,2], [3,4], [5]Każda porcja jest wycinkiem, więc możesz używać na niej metod wycinków, na przykład
chunk.len()zwraca liczbę elementów w tej porcji. Ostatnia porcja może być mniejsza, jeśli tablica nie dzieli się równo.
Możesz także połączyć .enumerate() z .chunks(), aby jednocześnie uzyskać indeks i fragment:
for (i, chunk) in numbers.chunks(2).enumerate() { }
// Wartości: (0,[1,2]), (1,[3,4]), (2,[5])Tutaj .chunks(2) najpierw tworzy wycinki, a następnie .enumerate() opakowuje każdy z nich licznikiem, więc i to indeks fragmentu, a chunk to wycinek.
Iteruj z modyfikacją:
let mut numbers = [1, 2, 3, 4, 5]; for num in numbers.iter_mut() { *num *= 2; } // Tablica przyjmuje postać: [2, 4, 6, 8, 10]
Wyzwanie
ŁatwyUtwórz program, który przetwarza listę zakupów z produktami i ich cenami oraz udostępnia różne widoki danych.
Program powinien:
- Wyświetlić numer każdego produktu i jego cenę (używając
enumerate). Zastosuj formatItem N: $Price(np.Item 1: $2.75). - Wyświetlić ceny w parach (używając
chunks) jako "bundle deals". Jeśli zestaw zawiera 2 produkty, wyświetlić ich sumę:Bundle N: $Price1 + $Price2 = $Sum. Jeśli zawiera tylko 1 produkt, wyświetlić:Bundle N: $Price. - Zastosować 10% zniżki do wszystkich cen (używając
iter_mut). - Wyświetlić końcowe ceny po zniżce, każdą w nowym wierszu, z dokładnością do 2 miejsc po przecinku (np.
$2.48).
Podpowiedź: Możesz łączyć iteratory, na przykład prices.chunks(2).enumerate() udostępnia jednocześnie indeks fragmentu i sam fragment. Każdy chunk jest wycinkiem, więc możesz wywołać na nim chunk.len() i odwołać się do jego elementów za pomocą indeksów chunk[0], chunk[1] itd.
Oczekiwany format cen na wyjściu:
Użyj ${:.2}, aby wyświetlać ceny z dokładnością do 2 miejsc po przecinku.
Dokładny tekst to Bundle 4: $7.90.
Spróbuj swoich sił
fn main() {
let mut prices = [2.75, 1.50, 5.00, 3.5, 4.1, 2.25, 7.9];
println!("Original Prices:");
// TODO: Użyj enumerate(), aby wypisać numer i cenę każdego produktu
// Wskazówka: prices.iter().enumerate() zwraca pary (index, &price)
// Formatuj ceny do 2 miejsc po przecinku za pomocą {:.2}; dokładny format znajdziesz w instrukcji
println!("\nBundle Deals:");
// TODO: Połącz chunks(2) i enumerate() w łańcuch: prices.chunks(2).enumerate()
// To zwraca pary (index, chunk); każdy chunk jest wycinkiem, więc chunk.len() podaje jego rozmiar
// Jeśli chunk.len() == 2, wypisz: "Bundle 1: $2.75 + $1.50 = $4.25"
// Jeśli chunk.len() == 1, wypisz wiersz dla pojedynczego produktu opisany w instrukcji
// Użyj {:.2}, aby sformatować wszystkie ceny do 2 miejsc po przecinku
// TODO: Użyj iter_mut(), aby zastosować rabat 10% discount do wszystkich cen
// Wskazówka: pomnóż każdą wartość *price przez 0.9
println!("\nPrices after 10% discount:");
// TODO: Wypisz każdą cenę po rabacie, sformatowaną do 2 miejsc po przecinku
// Oczekiwany format wyjścia pokazano w instrukcji
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Operatory, część 1
Operatory arytmetyczneOperator moduloSkrócone operacje arytmetyczneOperatory porównaniaPorównywanie ciągów znaków7Podstawowe wejście i wyjście
Wyświetlanie w konsoliOdczytywanie danych od użytkownikaPowtórka – do 120Powtórka – prawda czy fałsz5Operatory, część 2
Operatory logiczne, część 1Operatory logiczne, część 2Powtórka — prosta logikaOperatory logiczne, część 311Funkcje
Deklarowanie funkcjiParametry i argumentyWartości zwracaneWiele wartości zwracanychPowtórka – funkcja SigmaPowtórka – funkcja walidująca14Iterowanie po tablicach
Przewodnik po zakresachUlepszona pętla forPożyczanie w pętliTypowe operacje na tablicach3Zmienne – część 2
Deklarowanie typuKonwencje nazewnictwaWnioskowanie o typiePodsumowanie – inicjalizacja zmiennychRzutowanie typów9Pętle
Pętla for dla sekwencjiPętla whileInstrukcja breakInstrukcja continuePętle zagnieżdżoneEtykiety pętliPętla nieskończonaPodsumowanie — dynamiczne dane wejściowe12Podstawy tablic
Deklarowanie tablicTablica jako parametrDostęp do elementówModyfikowanie tablicPodsumowanie — czytelny wydruk tablicy15Operacje na ciągach znaków
Metody ciągów znakówMakro format!Konwersja ciągów znakówPowtórka — formatowaniePoćwicz samodzielnie: Kompilator Rust online