CodeBlanks Logo Icon CodeBlanks

Array ve slice

Const generics ile dizi işlemleri yapmayı öğrenirsin.

Array ve slice

Diziler ([T; N]) uzunluğu türde taşır; dilimler (&[T]) uzunluğu çalışma anında taşır. Diziden dilime geçiş otomatik ve ücretsizdir; tersi try_into ile denetimli yapılır. Diziler değer türüdür: kopyalanabilir, fonksiyondan döndürülebilir ve Copy elemanlarla Copy'dir:

let a: [i32; 3] = [1, 2, 3];
let d: &[i32] = &a;                     // dizi → dilim
let b: [i32; 3] = d.try_into().unwrap(); // dilim → dizi
let c = a;                               // kopya, a hâlâ geçerli

Dilimi sabit parçalara bölmek

Dilimi eşit boyutlu dizilere çevirmek, sonraki işlemlerin sabit boyutla çalışmasını sağlar:

let v = [1, 2, 3, 4, 5, 6];
let ciftler: Vec<[i32; 2]> = v
    .chunks_exact(2)
    .map(|c| c.try_into().unwrap())   // her parça tam 2 eleman
    .collect();

Burada unwrap güvenlidir çünkü chunks_exact(2) yalnızca 2 elemanlı parçalar üretir.

Uygulama İkili diziler

let v = [1, 2, 3, 4, 5, 6]; dizisini chunks_exact(2) ve try_into ile Vec<[i32; 2]>'ye çevir ve {:?} ile yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn main() {
    let v = [1, 2, 3, 4, 5, 6];
    let ciftler: Vec<[i32; 2]> = v.chunks_exact(2).map(|c| c.try_into().unwrap()).collect();
    println!("{:?}", ciftler);
}

Beklenen çıktı

[[1, 2], [3, 4], [5, 6]]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>chunks_exact(2)</code> ile <code>chunks(2)</code> arasındaki fark nedir?

  • chunks_exact daha yavaş
  • chunks hata verir
  • chunks_exact yalnızca tam parçaları verir; artan elemanlar remainder() ile alınır Doğru cevap
  • Fark yok

Açıklama: Her parçanın boyu kesin bilindiği için derleyici sınır denetimlerini kaldırabilir.

2 Tam parçalar

Soru
let ciftler: Vec<[i32; 2]> = v
    .____(2)
    .map(|c| c.try_into().unwrap())
    .collect();
Cevap
let ciftler: Vec<[i32; 2]> = v
    .chunks_exact(2)
    .map(|c| c.try_into().unwrap())
    .collect();

Açıklama: chunks_exact yalnızca tam boyutlu parçalar verir.

3 Dönüşüm ve yöntem

Kavram Anlamı
[T; N] → &[T] Otomatik
&[T] → [T; N] try_into
windows(2) Örtüşen parçalar
chunks_exact(n) Tam, örtüşmeyen

İleri seviye bölümündeki tüm dersler