trs_dataframe/dataframe/
index.rsuse data_value::DataValue;
use super::{colums_store::ColumnFrame, Key};
#[derive(Debug)]
pub struct Index {
index: Vec<usize>,
values: Vec<Vec<DataValue>>,
}
impl Index {
pub fn new(key: Vec<Key>, df: &ColumnFrame) -> Self {
let selected = df.select(Some(key.as_slice()));
let mut this = Self {
index: Vec::new(),
values: Vec::new(),
};
for (index, candidate) in selected.rows().into_iter().enumerate() {
this.index.push(index);
this.values.push(candidate.to_vec());
}
this
}
pub fn get(&self, values: &[DataValue]) -> Option<usize> {
self.values
.iter()
.position(|row| row.iter().zip(values.iter()).all(|(a, b)| a == b))
.map(|idx| self.index[idx])
}
}