Menu
CoddyTech

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]
challenge icon

Tantangan

Mudah

Buat program yang memproses daftar belanja berisi barang dan harganya, lalu menampilkan data tersebut dalam berbagai bentuk.

Program harus:

  1. Mencetak nomor dan harga setiap barang (menggunakan enumerate). Gunakan format Item N: $Price (misalnya, Item 1: $2.75).
  2. 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.
  3. Menerapkan diskon 10% pada semua harga (menggunakan iter_mut).
  4. 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

}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Compiler Rust online