For Loop yang Disempurnakan
Termasuk bagian Dasar-Dasar dalam perjalanan Rust di Coddy. Pelajaran 66 dari 75.
Ada berbagai cara untuk melakukan iterasi pada array, berikut beberapa di antaranya:
Perhatikan array berikut:
let numbers = [1, 2, 3, 4, 5];Iterator Langsung:
for num in numbers.iter() {} // Nilai: 1, 2, 3, 4, 5
Indeks & Nilai:
for (index, value) in numbers.iter().enumerate() { } // Nilai: (0,1), (1,2), (2,3), (3,4), (4,5)
Potongan dengan ukuran tertentu:
for chunk in numbers.chunks(2) { } // Nilai: [1,2], [3,4], [5]Setiap potongan adalah slice, jadi kamu bisa menggunakan method slice padanya, misalnya,
chunk.len()mengembalikan jumlah elemen dalam potongan tersebut. Potongan terakhir mungkin lebih kecil jika array tidak dapat dibagi rata.
Kamu juga bisa merangkai .enumerate() ke .chunks() untuk mendapatkan indeks dan potongan sekaligus:
for (i, chunk) in numbers.chunks(2).enumerate() { }
// Nilai: (0,[1,2]), (1,[3,4]), (2,[5])Di sini, .chunks(2) menghasilkan irisan terlebih dahulu, lalu .enumerate() membungkus setiap irisan dengan penghitung, sehingga i adalah indeks potongan dan chunk adalah irisannya.
Melakukan iterasi dengan mutasi:
for num in numbers.iter_mut() { *num *= 2; } // array menjadi: [2, 4, 6, 8, 10]
Tantangan
MudahBuat program yang memproses daftar belanja berisi barang dan harganya, lalu menampilkan data tersebut dalam berbagai bentuk.
Program harus:
- Mencetak nomor dan harga setiap barang (menggunakan
enumerate). Gunakan formatItem N: $Price(misalnya,Item 1: $2.75). - Mencetak harga secara berpasangan (menggunakan
chunks) sebagai "penawaran paket". Jika sebuah paket berisi 2 barang, cetak jumlah harganya:Bundle N: $Price1 + $Price2 = $Sum. Jika hanya berisi 1 barang, cetak:Bundle N: $Price. - Menerapkan diskon 10% pada semua harga (menggunakan
iter_mut). - Mencetak harga akhir setelah diskon, masing-masing pada baris baru, dengan format 2 angka di belakang koma (misalnya,
$2.48).
Petunjuk: Kamu dapat merangkai iterator, misalnya, prices.chunks(2).enumerate() memberikan indeks chunk dan slice chunk sekaligus. Setiap chunk adalah slice, jadi kamu dapat memanggil chunk.len() dan mengakses indeksnya dengan chunk[0], chunk[1], dan seterusnya.
Format output harga yang diharapkan:
Gunakan ${:.2} untuk memformat harga dengan 2 angka di belakang koma.
Teks persisnya adalah Bundle 4: $7.90.
Coba sendiri
fn main() {
let mut prices = [2.75, 1.50, 5.00, 3.5, 4.1, 2.25, 7.9];
println!("Original Prices:");
// TODO: Gunakan enumerate() untuk mencetak nomor dan harga setiap barang
// Petunjuk: prices.iter().enumerate() menghasilkan pasangan (index, &price)
// Format harga hingga 2 angka di belakang koma menggunakan {:.2}, lihat petunjuk untuk format yang tepat
println!("\nBundle Deals:");
// TODO: Rangkai chunks(2) dan enumerate(): prices.chunks(2).enumerate()
// Ini menghasilkan pasangan (index, chunk). Setiap chunk adalah slice, jadi chunk.len() menunjukkan ukurannya
// Jika chunk.len() == 2, cetak: "Bundle 1: $2.75 + $1.50 = $4.25"
// Jika chunk.len() == 1, cetak baris untuk satu barang seperti yang dijelaskan dalam petunjuk
// Gunakan {:.2} untuk memformat semua harga hingga 2 angka di belakang koma
// TODO: Gunakan iter_mut() untuk menerapkan 10% discount pada semua harga
// Petunjuk: kalikan setiap *price dengan 0.9
println!("\nPrices after 10% discount:");
// TODO: Cetak setiap harga setelah diskon dengan 2 angka di belakang koma
// Format output yang diharapkan ditunjukkan dalam petunjuk
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
4Operator Bagian 1
Operator AritmetikaOperator ModuloPintasan AritmetikaOperator PerbandinganPerbandingan String7Input/Output Dasar
Menampilkan teks di konsolMembaca input penggunaUlasan: Hingga 120Ulasan: Benar atau Salah5Operator Bagian 2
Operator Logika Bagian 1Operator Logika Bagian 2Ulasan: Logika SederhanaOperator Logika Bagian 311Fungsi
Mendeklarasikan FungsiParameter dan ArgumenNilai KembalianBeberapa Nilai KembalianRingkasan: Fungsi SigmaRingkasan: Fungsi Validasi14Iterasi pada Array
Panduan RangeFor Loop yang DisempurnakanBorrow dalam LoopOperasi Umum pada Array3Variabel Bagian 2
Deklarasi TipeKonvensi PenamaanInferensi TipeRangkuman: Inisialisasi VariabelKonversi Tipe9Perulangan
For untuk Menelusuri UrutanWhile LoopBreakContinueNested LoopLabel LoopInfinite LoopRingkasan: Input DinamisLatihan sendiri: Compiler Rust online