使用旧Rust 2015
0.1.0 |
|
---|
#38 在 #iterate
526 每月下载量
15KB
168 行
ordered_zip
概述
一个迭代器,可以同时迭代两个其他迭代器,优先级由成对排序决定。
动机
有时需要迭代两个序列,这些序列的项按成对顺序排序(例如,在稀疏向量上执行操作)。ordered_zip crate旨在为此提供灵活的API。
入门
以下说明将帮助您在本地机器上复制项目,以便进行开发和测试。有关如何在实时系统上部署项目的说明,请参阅部署部分。
先决条件
ordered_zip crate没有任何依赖。
安装
将以下内容添加到项目Cargo.toml
中的依赖项
ordered_zip = "0.1.0"
… 或其他更新的版本。
然后添加 …
extern crate ordered_zip;
… 和 …
use ordered_zip;
… 到您的crate根文件中(例如lib.rs
,main.rs
)。
示例使用
use std::cmp::Ordering;
use ordered_zip::Compare;
use ordered_zip::NonGreedy;
struct IndexCompare;
impl<T, U> Compare<(usize, T), (usize, U)> for IndexCompare {
fn cmp(lhs: &(usize, T), rhs: &(usize, U)) -> Ordering {
(lhs.0).cmp(&(rhs.0))
}
}
type NonGreedyStrategy = NonGreedy<IndexCompare>;
let v1 = vec![(0, 0.1), (1, 0.2), (3, 0.1), (4, 0.25), (7, 0.75)];
let v2 = vec![(2, 0.01), (4, 0.3), (5, 0.9), (9, 0.15), (10, 0.35)];
let nongreedy_zip = v1.into_iter().ordered_zip::<NonGreedyStrategy>(v2);
let dot_product = nongreedy_zip.fold(0.0, |sum, pair| {
sum + match pair {
(Some((_, l)), Some((_, r))) => l * r,
_ => 0.0,
}
}); // => 0.075
API参考
贡献
请阅读CONTRIBUTING.md以了解我们的行为准则和提交拉取请求的流程。
版本控制
我们使用SemVer进行版本控制。有关可用版本,请参阅此仓库的标签。
作者
- Vincent Esche - 初始工作 - Regexident
另请参阅参与此项目的贡献者名单。
许可证
本项目采用BSD许可证 - 有关详细信息,请参阅LICENSE.md文件。
依赖项
~230KB