Моя функция get_index
должна возвращать индекс заявленного элемента
pub const INVALID_INDEX: usize = <usize>::max_value();
pub fn get_index(&mut self, element: T) -> usize
where
T: std::cmp::Ord,
{
if self.data.is_empty() {
return 0;
}
match self.data.binary_search_by(|probe| probe.cmp(&element)) {
Ok(pos) => return pos,
Err(pos) => return INVALID_INDEX,
}
}
Чтобы предоставить тест, я создаю значение и некоторые фиктивные данные:
let mut list: List<FooModel> = List::new();
let my_foo_1 = FooModel {name: "John".to_string(), id_num: 10};
let my_foo_2 = FooModel {name: "Bill".to_string(), id_num: 20};
list.add(my_foo_1.clone());
list.add(my_foo_2.clone());
list.add(my_foo_3.clone());
list.add(my_foo_4.clone());
list.add(my_foo_5.clone());
проблема возникает, когда я пытаюсь получить индекс для первого элемента
println!("Element is at index {:?}",list.get_index(my_foo_1.clone()));
Я получаю значение INVALID_INDEX
, возвращаемое для my_foo_1
;все остальные выражения возвращают правильное значение индекса.
Если я создаю список с некоторыми общими типами:
let mut list_2: List<u32> = List::new();
list_2.add(1);
list_2.add(2);
list_2.add(3);
list_2.add(4);
Я получаю правильный результат для вызова:
println!("Element is at index {:?}", list_2.get_index(1));