gpt4 book ai didi

c# - 最接近匹配的 Linq 搜索结果

转载 作者:太空狗 更新时间:2023-10-29 20:53:32 25 4
gpt4 key购买 nike

我有一个 ObservableCollection,它包含一个 Person 对象。我的应用程序中有一个搜索功能,并希望在顶部显示最相关的结果。这样做最有效的方法是什么?我当前的搜索方法只是调用 contains 方法:

 var results = (from s in userList
where s.Name.Contains(query)
select s).ToList();

这工作正常,但结果的排序顺序与它们在 userList 中出现的顺序相同。如果我搜索 Pete,那么它应该首先显示 Pete,然后是 Peter,然后是 Peter Smith 等等。它不必太复杂,因为它只会处理几千(最大)结果。我天真的方法是先执行 s.Name == query,显示该项目(如果有),然后执行 s.Name.Contains(query),删除匹配的项目并将其附加到先前的匹配结果。但是,这似乎到处都是,所以有更好的方法吗?谢谢(ps - 搜索时只会用名字,我不能用SQL方法)

最佳答案

您可以制作一个提供名称和查询字符串并返回整数值的例程。

一旦你有了它,只需通过 order by 返回:

int QueryOrder(string query, string name)
{
if (name == query)
return -1;
if (name.Contains(query))
return 0;

return 1;
}

然后做:

var results = userList.OrderBy(s => QueryOrder(query, s.Name));

这种方法的好处是,稍后您可以扩展例程以提供更多详细信息,从而允许您根据收到的匹配项的“好”程度进行排序。例如,“Pete”->“Peter”可能比“Pete”->“Peter Smith”更匹配,因此您可以让您的逻辑针对不同的选项返回不同的值...

如果您需要删除“非 Pete”匹配项,您也可以使用 Where 子句排除。

关于c# - 最接近匹配的 Linq 搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3925866/

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