map, filter, collect
Dizileri dönüştürün
map, filter, collect, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.
Dizileri Dönüştürme
Yineleyici işlem hatlarındaki işlerin çoğunu üç yöntem yapar: map her öğeyi dönüştürür, filter bazı öğeleri tutar ve collect sonuçları bir koleksiyonda toplar.
Bu yöntemler birlikte, birçok elle yazılmış döngünün yerini kısa ve okunabilir zincirlerle doldurur.
map: Bir Girdi, Bir Çıktı
map, her öğeye bir kapanış uygular ve dönüştürülmüş değeri üretir. Öğe sayısı aynı kalır; yalnızca değerleri değişir.
Tembel olduğu için kapanış yalnızca yineleyici tüketildiğinde çalışır.
fn main() {
let nums = vec![1, 2, 3];
let doubled: Vec<i32> = nums.iter().map(|x| x * 2).collect();
println!("{:?}", doubled);
}map Türü Değiştirebilir
map yönteminin çıktı türünün girdi türüyle aynı olması gerekmez. Burada sayıları dizelere dönüştürüyoruz.
Bu özellik, map yöntemini verileri bir biçimden başka bir biçime dönüştürmek için ideal hâle getirir.
fn main() {
let nums = vec![1, 2, 3];
let labels: Vec<String> = nums.iter().map(|x| format!("n{}", x)).collect();
println!("{:?}", labels);
}filter: İstediklerinizi Tutun
filter, bool döndüren bir kapanış alır. Kapanışın true döndürdüğü öğeler tutulur; diğerleri atılır.
Kapanış bir başvuru alır; bu nedenle çoğu zaman * ile başvuruyu kaldırır veya kalıp eşleştirme kullanırsınız.
fn main() {
let nums = vec![1, 2, 3, 4, 5, 6];
let evens: Vec<i32> = nums.into_iter().filter(|x| x % 2 == 0).collect();
println!("{:?}", evens);
}map ve filter'ı Zincirleme
Bağdaştırıcıları serbestçe zincirleyebilirsiniz. Sıra önemlidir: Her öğe zincir boyunca yukarıdan aşağıya ilerler.
Burada çift sayıları tutuyor, ardından kalan sayıların karesini alıyoruz.
fn main() {
let result: Vec<i32> = (1..=6)
.filter(|x| x % 2 == 0)
.map(|x| x * x)
.collect();
println!("{:?}", result);
}collect ile Bir Vec Oluşturma
collect bir yineleyiciyi tüketir ve bir koleksiyon oluşturur. Birçok koleksiyon türü mümkün olduğundan, genellikle hedef türü belirtirsiniz.
collect::<Vec<_>>() turbobalık sözdizimi, değişkeni tür belirtimiyle tanımlamaya alternatiftir.
fn main() {
let squares = (1..=4).map(|x| x * x).collect::<Vec<i32>>();
println!("{:?}", squares);
}collect ile Bir String Oluşturma
collect yalnızca vektörlerle sınırlı değildir. char yineleyicisi bir String içinde toplanabilir.
Rust, öğelerin nasıl birleştirileceğine karar vermek için hedef türü kullanır.
fn main() {
let shouted: String = "hello".chars().map(|c| c.to_ascii_uppercase()).collect();
println!("{}", shouted);
}collect ile Bir HashMap Oluşturma
Anahtar-değer demetlerinden oluşan bir yineleyici, bir HashMap içinde toplanabilir. Öğeleri zip ile eşleştirin veya bir map içinde demetler oluşturun.
Bu, iki paralel diziden arama tabloları oluşturmanın temiz bir yoludur.
use std::collections::HashMap;
fn main() {
let map: HashMap<i32, i32> = (1..=3).map(|x| (x, x * x)).collect();
println!("{:?}", map.get(&2));
}Üçünü Birlikte Kullanma
Tipik bir işlem hattı bir cümle gibi okunur: Öğeleri al, filtrele, dönüştür ve topla.
Burada üç harften uzun words öğelerini tutuyor ve onları büyük harfe dönüştürüyoruz.
fn main() {
let words = vec!["hi", "rust", "go", "code"];
let kept: Vec<String> = words
.into_iter()
.filter(|w| w.len() > 3)
.map(|w| w.to_uppercase())
.collect();
println!("{:?}", kept);
}filter_map: Aynı Anda Filtreleme ve Dönüştürme
filter_map, Option döndüren bir kapanış uygular. Some(v) tutulup açılır; None atılır.
Bu yöntem, bazı inputs öğelerinin geçersiz olabildiği ayrıştırma işlemlerinde özellikle kullanışlıdır.
fn main() {
let inputs = vec!["1", "two", "3"];
let nums: Vec<i32> = inputs
.into_iter()
.filter_map(|s| s.parse::<i32>().ok())
.collect();
println!("{:?}", nums);
}Bu Kalıp Neden İşe Yarar?
map/filter/collect işlem hatları bildirimseldir: Nasıl döngü kurulacağını değil, ne istediğinizi söyler. Bir eksik ya da fazla sayma hatalarını ve ara değiştirilebilir durumu önlerler.
Ayrıca tembellik sayesinde adımlar arasında geçici vektörler oluşturulmaz.
Hızlı Kontrol
Dizileri dönüştürme hakkında neler bildiğinizi kontrol edin.
Özet
Artık gerçek yineleyici işlem hatları oluşturabilirsiniz:
mapher öğeyi dönüştürür ve türünü değiştirebilirfilter, predicate sonucutrueolan öğeleri tutarcollect, sonuçlarıVec,String,HashMapve daha fazlasında toplarfilter_map,Optionkullanarak tek adımda filtreler ve dönüştürür
Sıkça Sorulan Sorular
“map, filter, collect” dersi ücretsiz mi?
Evet — “map, filter, collect” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.
“map, filter, collect” dersinde ne öğreneceğim?
Dizileri dönüştürün Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“map, filter, collect” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Iterator Özelliği
- map, filter, collect
- Uyarlayıcılar ve Tüketiciler
- Özel Yineleyiciler