gpt4 book ai didi

rust - binary_search_by 在使用自定义结构时返回一个奇怪的索引

转载 作者:行者123 更新时间:2023-11-29 08:34:59 31 4
gpt4 key购买 nike

我的函数 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()));

我得到 my_foo_1 返回的 INVALID_INDEX 值;所有其他表达式返回正确的索引值。

如果我创建一个包含一些通用类型的列表:

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));

最佳答案

这是一个MCVE你的问题:

fn main() {
let data = vec!["John", "Bill"];

let v = data.binary_search_by(|probe| probe.cmp(&"John")).ok();

println!("{:?}", v);
}

documentation for binary_search_by的第一句状态(强调我的):

Binary searches this sorted slice with a comparator function.

您的数据(很可能是因为您忽略了显示相关代码)未排序。

关于rust - binary_search_by 在使用自定义结构时返回一个奇怪的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56095260/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com