Трейт FromIterator
Трейт FromIterator позволяет создать значение типа,
реализующего этот трейт, из итератора. Он широко используется
для преобразования итераторов в коллекции, такие как векторы,
строки, множества и другие. Основной метод трейта -
from_iter - принимает итератор и возвращает новое
значение коллекции.
Синтаксис
trait FromIterator<A> {
fn from_iter<T>(iter: T) -> Self
where
T: IntoIterator<Item = A>;
}
Пример
Давайте создадим вектор из итератора с помощью метода
from_iter:
fn main()
{
let res = Vec::from_iter(1..=5);
println!("{:?}", res);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Пример
Давайте соберём строку из итератора символов с помощью
метода collect, который использует трейт
FromIterator:
fn main()
{
let res: String = "abcde".chars().collect();
println!("{}", res);
}
Результат выполнения кода:
"abcde"
Пример
Давайте создадим множество из итератора чисел с
помощью трейта FromIterator:
use std::collections::HashSet;
fn main()
{
let res: HashSet<i32> = HashSet::from_iter(vec![1, 2, 2, 3, 3, 4]);
println!("{:?}", res);
}
Результат выполнения кода:
{1, 2, 3, 4}
Пример
Давайте создадим собственную коллекцию, реализующую трейт
FromIterator:
struct MyCollection {
items: Vec<i32>,
}
impl FromIterator<i32> for MyCollection {
fn from_iter<T: IntoIterator<Item = i32>>(iter: T) -> Self {
MyCollection {
items: iter.into_iter().collect(),
}
}
}
fn main()
{
let res = MyCollection::from_iter(vec![1, 2, 3, 4, 5]);
println!("{:?}", res.items);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Смотрите также
-
трейт
IntoIterator,
который позволяет преобразовать тип в итератор -
трейт
FromIterator,
который создаёт коллекцию из итератора -
трейт
Default,
который создаёт значение по умолчанию -
ключевое слово
impl Trait,
которое позволяет указывать трейт в сигнатуре функции