CodeBlanks Logo Icon CodeBlanks

map ve filter

map ve filter adaptörleriyle iterator'ı dönüştürürsün.

map ve filter

map ve filter, yeni bir yineleyici döndüren bağdaştırıcılardır (adapter). Zincirlenerek veri işleme hatları kurulur:

let sonuc: Vec<i32> = (1..=10)
    .filter(|n| n % 3 == 0)   // 3, 6, 9
    .map(|n| n * n)           // 9, 36, 81
    .collect();

map her elemanı dönüştürür, filter koşulu sağlamayanları atar. filter_map ikisini birden yapar: closure Some(x) döndürürse tutar, None döndürürse atar.

Diğer bağdaştırıcılar

Sık kullanılan diğer bağdaştırıcılar:

(1..=5).take(2)              // 1, 2
(1..=5).skip(3)              // 4, 5
(1..=5).rev()                // 5, 4, 3, 2, 1
(1..=5).step_by(2)           // 1, 3, 5
(1..=3).chain(7..=8)         // 1, 2, 3, 7, 8
(1..=10).take_while(|n| n * n < 20)   // 1, 2, 3, 4

Bağdaştırıcılar yalnızca yineleyici döndürür; sonucu almak için zincir bir tüketen yöntemle (collect, sum, for) bitmelidir.

Uygulama Üçün katlarının karesi

1..=10 aralığında 3'e bölünenleri filter ile seç, map ile karelerini al ve vektöre toplayıp yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn main() {
    let sonuc: Vec<i32> = (1..=10).filter(|n| n % 3 == 0).map(|n| n * n).collect();
    println!("{:?}", sonuc);
}

Beklenen çıktı

[9, 36, 81]

Soru ve cevaplar

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

1 <code>["1", "a", "3"].iter().filter_map(|s| s.parse::&lt;i32&gt;().ok()).sum::&lt;i32&gt;()</code> nedir?

  • 0
  • 4 Doğru cevap
  • Panic
  • 13

Açıklama: "a" çevrilemediği için None olur ve atılır; 1 + 3 = 4.

2 Dönüştür

Soru
let kareler: Vec<i32> = (1..=3).____(|n| n * n).collect();
Cevap
let kareler: Vec<i32> = (1..=3).map(|n| n * n).collect();

Açıklama: map her elemanı closure'ın sonucuyla değiştirir.

3 Zincir ve sonucu

Kavram Anlamı
(1..=5).take(2) 1, 2
(1..=5).skip(3) 4, 5
(1..=5).step_by(2) 1, 3, 5
(1..=3).chain(7..=8) 1, 2, 3, 7, 8

Orta seviye bölümündeki tüm dersler