使用旧Rust 2015

0.1.0 2016年2月6日

#38#iterate

Download history 15/week @ 2024-04-07 162/week @ 2024-04-21 92/week @ 2024-04-28 118/week @ 2024-05-05 359/week @ 2024-05-12 83/week @ 2024-05-19 238/week @ 2024-05-26 249/week @ 2024-06-02 135/week @ 2024-06-09 392/week @ 2024-06-16 211/week @ 2024-06-23 191/week @ 2024-06-30 193/week @ 2024-07-07 107/week @ 2024-07-14

526 每月下载量

15KB
168

ordered_zip

Build Status Crates-Downloads Crates-Version Crates-License

概述

一个迭代器,可以同时迭代两个其他迭代器,优先级由成对排序决定。

动机

有时需要迭代两个序列,这些序列的项按成对顺序排序(例如,在稀疏向量上执行操作)。ordered_zip crate旨在为此提供灵活的API。

入门

以下说明将帮助您在本地机器上复制项目,以便进行开发和测试。有关如何在实时系统上部署项目的说明,请参阅部署部分。

先决条件

ordered_zip crate没有任何依赖。

安装

将以下内容添加到项目Cargo.toml中的依赖项

ordered_zip = "0.1.0"

… 或其他更新的版本。

然后添加 …

extern crate ordered_zip;

… 和 …

use ordered_zip;

… 到您的crate根文件中(例如lib.rsmain.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进行版本控制。有关可用版本,请参阅此仓库的标签

作者

另请参阅参与此项目的贡献者名单。

许可证

本项目采用BSD许可证 - 有关详细信息,请参阅LICENSE.md文件。

依赖项

~230KB