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 chunk adalah slice, jadi kamu bisa menggunakan method slice pada chunk tersebut. Contohnya,
chunk.len()mengembalikan jumlah elemen dalam chunk tersebut. Chunk terakhir mungkin lebih kecil jika array tidak dapat dibagi rata.
Kamu juga bisa merangkai .enumerate() setelah .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 masing-masing dengan penghitung, sehingga i adalah indeks potongan dan chunk adalah irisan.
Melakukan iterasi dengan mutasi:
let mut numbers = [1, 2, 3, 4, 5]; for num in numbers.iter_mut() { *num *= 2; } // array menjadi: [2, 4, 6, 8, 10]
Tantangan
MudahBuat program yang memproses daftar belanja beserta barang dan harganya, lalu menampilkan data tersebut dalam berbagai tampilan.
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 jumlahnya:Bundle N: $Price1 + $Price2 = $Sum. Jika hanya berisi 1 barang, cetak:Bundle N: $Price. - Terapkan diskon 10% pada semua harga (menggunakan
iter_mut). - Cetak harga akhir setelah diskon, masing-masing pada baris baru, dengan format 2 angka desimal (misalnya,
$2.48).
Petunjuk: Kamu dapat merangkai iterator, misalnya, prices.chunks(2).enumerate() memberimu indeks potongan dan irisan potongan sekaligus. Setiap chunk adalah irisan, jadi kamu dapat memanggil chunk.len() dan mengakses elemennya dengan indeks seperti chunk[0], chunk[1], dan seterusnya.
Format output harga yang diharapkan:
Gunakan ${:.2} untuk memformat harga dengan 2 angka desimal.
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 instruksi 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 instruksi
// 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 instruksi
}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