1 个不稳定版本
0.1.0 | 2024年6月21日 |
---|
在 模拟 中排名第 127
21KB
387 行
ElectoSIM
lib.rs
:
ElectoSIM
ElectoSIM 是一个库,允许您使用不同的方法模拟简单的选举。
方法
以下方法可用
- D'Hondt
- Webster/Sainte-Laguë
- Adams
- Imperiali
- Huntington-Hill
- 丹麦
- Hare-Niemeyer
- Hagenbach-Bischoff
- Imperiali - Quotient
- Droop
- 赢家通吃
使用方法
use electosim::methods::Method;
use electosim::models::Candidacy;
use electosim::SimpleElection;
fn main() {
let mut election = SimpleElection {
results: vec![
Candidacy::new(2010, 9),
Candidacy::new(1018, 4),
Candidacy::new(86, 0),
Candidacy::new(77, 0),
],
seats: 13,
method: Method::HAGENBASCHBISCHOFF,
};
election.compute().expect("Can not compute method");
election.results.iter().for_each(|c| println!("{:?}", c));
}
main
函数中的第一行创建一个新 [SimpleElection],包含候选人、可用的座位数和要使用的方法。然后调用 compute
方法来计算选举结果。最后,将结果打印到控制台。
compute_
函数
方法是一个具有以下类型的函数:fn(&mut Vec<T>, u16) -> Result<(), &str>
其中 T
是实现 WithVotes
和 WithSeats
特性的类型。如果您想在不使用 [SimpleElection] 结构的情况下计算选举结果,可以直接使用 compute_
函数。例如
use electosim::methods::divisor::compute_dhondt;
use electosim::models::Candidacy;
fn main() {
let mut candidacies = vec![
Candidacy::new(2010, 0),
Candidacy::new(1018, 0),
Candidacy::new(86, 0),
Candidacy::new(77, 0),
];
compute_dhondt(&mut candidacies, 13).unwrap();
candidacies.iter().for_each(|c| println!("{:?}", c));
}
在 methods::divisor (例如:D'hondt)和 methods::remainder (例如:Hare)模块中实现了一些 compute_
函数。