Array ve slice
- Rust kursu
- İleri seviye
- Ders 70/81
- 4 dk
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çerliDilimi 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
fn main() {
// buraya yaz
}Örnek çözüm
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
let ciftler: Vec<[i32; 2]> = v
.____(2)
.map(|c| c.try_into().unwrap())
.collect();
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 |