MATHGRAM

主に数学とプログラミング、時々趣味について。

[Rust] zipでfor文 & 速度比較

Rustで2つのイテレータをペアで回す方法です.

二つの方法があるようなので速度比較します.

標準装備を使う

fn main() {
    let x = vec![0; 1000000];
    let y = vec![0; 1000000];
    pair_iter(x, y);
}

fn pair_iter(x: Vec<i32>, y: Vec<i32>) {
    let start = time::now();

    for (i, j) in x.iter().zip(y.iter()) {
    }
    let end = time::now();
    println!("{}", end - start);
}

出力(実行時間)

PT0.033350S

crateのitertoolsを使う

cargo.tomlに

[dependencies]
itertools = "0.4.4"

を書いてから,

extern crate itertools;
use itertools::Zip;

fn main() {
    let x = vec![0; 1000000];
    let y = vec![0; 1000000];
    pair_iter(x, y);
}

fn pair_iter(x: Vec<i32>, y: Vec<i32>) {
    let start = time::now();

    for (i, j) in Zip::new((&x, &y)) {
    }
    let end = time::now();
    println!("{}", end - start);
}

出力(実行時間)

PT0.071162S

まとめ

単にzipで回すだけならcrateを使わない方が2倍ほど早いらしい.

以上です.