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

Tantangan

Mudah

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

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 jumlahnya: Bundle N: $Price1 + $Price2 = $Sum. Jika hanya berisi 1 barang, cetak: Bundle N: $Price.
  3. Terapkan diskon 10% pada semua harga (menggunakan iter_mut).
  4. 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

}
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