本文簡要介紹rust語言中 Trait std::iter::FromIterator
的用法。
用法
pub trait FromIterator<A> {
fn from_iter<T>(iter: T) -> Self where T: IntoIterator<Item = A>;
}
從 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用法及代碼示例
- 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-lang.org大神的英文原創作品 Trait std::iter::FromIterator。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。