use crate::{datapoint::DataPoint, ranklist::RankList, DataSet};
pub trait Ranker {
fn predict(&self, datapoint: &DataPoint) -> f32;
fn rank(&self, ranklist: &RankList) {
let mut score_per_index: Vec<(usize, f32)> = ranklist
.into_iter()
.enumerate()
.map(|(i, dp)| (i, self.predict(&dp)))
.collect();
score_per_index.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap());
ranklist
.permute(score_per_index.iter().map(|&(i, _)| i).collect())
.unwrap();
}
fn rank_dataset(&self, dataset: &DataSet) {
for ranklist in dataset.iter() {
self.rank(ranklist);
}
}
}