問題一覧に戻る
中級データ構造
問題78: collectメソッド
collect()はイテレータをコレクションに変換する強力なメソッドです。Vec、HashMap、String、さらにはResult/Optionも作成できます。collectは戻り値の型に対してジェネリックなため、型注釈がしばしば必要です。FromIteratorトレイトがこの柔軟性を可能にします。collectの理解はデータ変換のためのイテレータの可能性を解放します。
use std::collections::HashMap;
fn main() {
let numbers = vec![1, 2, 3, 4, 5];
// Vecへ収集
let squared: Vec<> = numbers.iter()
.map(|x| x * x)
.();
// HashMapへ収集
let map: HashMap<, > = numbers.iter()
.map(|x| (*x, x * 10))
.();
// Stringへ収集
let text = "hello";
let uppercase: = text.chars()
.map(|c| c.to_uppercase())
.()
.();
// Resultの収集
let strings = vec!["1", "2", "3", "4"];
let parsed: Result<Vec<>, _> = strings.iter()
.map(|s| s.parse::<i32>())
.();
println!("{:?}", squared);
println!("{:?}", map);
println!("{}", uppercase);
println!("{:?}", parsed);
}