#random #collection #vec

weighted_random_list

A Vec<T> that allows you to define the weight of each entry and randomly get entries

2 releases

0.1.1 Apr 8, 2019
0.1.0 Apr 8, 2019

#331 in #vec

MIT/Apache

16KB
260 lines

weighted_random_list

CI Status

A Vec that allows you to define the weight of each entry and randomly get entries:

extern crate weighted_random_list;

use weighted_random_list::WeightedRandomList;

fn main() {
    let list = [
        (1, "https://source.example.net/archive"),
        (10, "https://mirror-slow0.example.net/archive"),
        (10, "https://mirror-slow1.example.net/archive"),
        (100, "https://mirror-fast.example.net/archive"),
    ];

    let mirrors = list.iter()
            .map(|(weight, url)| (*weight, url.to_string()))
            .collect::<WeightedRandomList<String>>();


    let random_choice = mirrors.get_random();
    println!("Using {:?} this time", random_choice);
}

lib.rs:

WeightedRandomList enables you to to randomly select elements from your collection while

Example select mirror

In this example we would like to give more traffic/weight to the the system "mirror-fast", less to the slow mirrors and the least to the main archive:

extern crate weighted_random_list;

use weighted_random_list::WeightedRandomList;

fn main() {
    let list = [
        (1, "https://source.example.net/archive"),
        (10, "https://mirror-slow0.example.net/archive"),
        (10, "https://mirror-slow1.example.net/archive"),
        (100, "https://mirror-fast.example.net/archive"),
    ];

    let mirrors = list.iter()
            .map(|(weight, url)| (*weight, url.to_string()))
            .collect::<WeightedRandomList<String>>();


    let random_choice = mirrors.get_random();
    println!("Using {:?} this time", random_choice);
}

Dependencies

~570–800KB
~11K SLoC