collect
- Rust kursu
- Orta seviye
- Ders 51/115
- 4 dk
collect ile iterator'u koleksiyona çevirirsin.
collect
collect, yineleyiciyi FromIterator uygulayan herhangi bir koleksiyona dönüştürür. Hedef tür, değişken türünden ya da turbofish'ten anlaşılır:
let v: Vec<char> = "abc".chars().collect();
let s: String = vec!['x', 'y'].into_iter().collect();
let k: std::collections::HashSet<i32> = [1, 1, 2].into_iter().collect();Aynı zincir, yalnızca hedef tür değiştirilerek farklı koleksiyonlar üretebilir.
Hatalı toplama
Tüm metinleri sayıya çevirmek ve biri bile hatalıysa vazgeçmek için:
let iyi: Result<Vec<i32>, _> = ["4", "5"].iter().map(|s| s.parse::<i32>()).collect();
let kotu: Result<Vec<i32>, _> = ["1", "x"].iter().map(|s| s.parse::<i32>()).collect();
println!("{:?} {}", iyi, kotu.is_err()); // Ok([4, 5]) trueunzip ise ikililerden oluşan bir yineleyiciyi iki koleksiyona ayırır: let (a, b): (Vec<_>, Vec<_>) = [(1, 'a'), (2, 'b')].into_iter().unzip();
Uygulama Doğrulayarak topla
["1", "2", "x"] ve ["4", "5"] dizilerini parse::<i32>() ile Result<Vec<i32>, _>'ye topla. Birincinin is_err() sonucunu ve ikinciyi {:?} ile boşlukla yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn main() {
let r1: Result<Vec<i32>, _> = ["1", "2", "x"].iter().map(|s| s.parse::<i32>()).collect();
let r2: Result<Vec<i32>, _> = ["4", "5"].iter().map(|s| s.parse::<i32>()).collect();
println!("{} {:?}", r1.is_err(), r2);
}Beklenen çıktı
true Ok([4, 5])
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>Result</code> öğelerinden oluşan bir yineleyici <code>Result<Vec<T>, E></code>'ye toplanırsa ne olur?
- Hepsi Ok ise Ok(vektör), ilk Err'de durup o hatayı döndürür Doğru cevap
- Err'ler atlanır
- Panic verir
- Derlenmez
Açıklama: Bu, girdilerin tamamını doğrulayıp tek bir hata ile dönmenin en kısa yoludur. Option için de aynısı geçerlidir.
2 Metne topla
let s: ____ = vec!['x', 'y'].into_iter().collect();
let s: String = vec!['x', 'y'].into_iter().collect();
Açıklama: char yineleyicisi String'e toplanabilir.
3 Hedef tür ve sonuç
| Kavram | Anlamı |
|---|---|
Vec<char> ← "ab".chars() |
['a', 'b'] |
String ← ['x', 'y'] |
"xy" |
HashSet ← [1, 1, 2] |
2 eleman |
Result<Vec<i32>, _> ← ["1", "x"] |
Err |