本文简要介绍rust语言中 Trait core::iter::FromIterator
的用法。
用法
pub trait FromIterator<A>: Sized {
fn from_iter<T: IntoIterator<Item = A>>(iter: T) -> Self;
}
从 Iterator
转换。
通过为类型实现FromIterator
,您可以定义如何从迭代器创建它。这对于说明某种集合的类型很常见。
FromIterator::from_iter()
很少被显式调用,而是通过 Iterator::collect()
方法使用。有关更多示例,请参阅 Iterator::collect()
的文档。
另请参阅: IntoIterator
。
例子
基本用法:
use std::iter::FromIterator;
let five_fives = std::iter::repeat(5).take(5);
let v = Vec::from_iter(five_fives);
assert_eq!(v, vec![5, 5, 5, 5, 5]);
使用 Iterator::collect()
隐式使用 FromIterator
:
let five_fives = std::iter::repeat(5).take(5);
let v: Vec<i32> = five_fives.collect();
assert_eq!(v, vec![5, 5, 5, 5, 5]);
为您的类型实现FromIterator
:
use std::iter::FromIterator;
// A sample collection, that's just a wrapper over Vec<T>
#[derive(Debug)]
struct MyCollection(Vec<i32>);
// Let's give it some methods so we can create one and add things
// to it.
impl MyCollection {
fn new() -> MyCollection {
MyCollection(Vec::new())
}
fn add(&mut self, elem: i32) {
self.0.push(elem);
}
}
// and we'll implement FromIterator
impl FromIterator<i32> for MyCollection {
fn from_iter<I: IntoIterator<Item=i32>>(iter: I) -> Self {
let mut c = MyCollection::new();
for i in iter {
c.add(i);
}
c
}
}
// Now we can make a new iterator...
let iter = (0..5).into_iter();
// ... and make a MyCollection out of it
let c = MyCollection::from_iter(iter);
assert_eq!(c.0, vec![0, 1, 2, 3, 4]);
// collect works too!
let iter = (0..5).into_iter();
let c: MyCollection = iter.collect();
assert_eq!(c.0, vec![0, 1, 2, 3, 4]);
相关用法
- Rust FromIterator.from_iter用法及代码示例
- Rust FromUtf16Error用法及代码示例
- Rust FromUtf8Error.as_bytes用法及代码示例
- Rust FromVecWithNulError.into_bytes用法及代码示例
- Rust FromBytesWithNulError用法及代码示例
- Rust FromResidual.from_residual用法及代码示例
- Rust From用法及代码示例
- Rust FromUtf8Error.into_bytes用法及代码示例
- Rust FromSecsError用法及代码示例
- Rust FromUtf8Error用法及代码示例
- Rust FromUtf8Error.utf8_error用法及代码示例
- Rust FromVecWithNulError用法及代码示例
- Rust FromRawFd.from_raw_fd用法及代码示例
- Rust FromStr.from_str用法及代码示例
- Rust FromStr用法及代码示例
- Rust FromVecWithNulError.as_bytes用法及代码示例
- Rust Formatter.precision用法及代码示例
- Rust Formatter.debug_list用法及代码示例
- Rust Formatter.sign_minus用法及代码示例
- Rust File用法及代码示例
- Rust FileExt.read_exact_at用法及代码示例
- Rust FileTypeExt.is_char_device用法及代码示例
- Rust File.open用法及代码示例
- Rust File.sync_data用法及代码示例
- Rust Formatter.write_fmt用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Trait core::iter::FromIterator。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。