string-comparison - 比较字符串和搜索字符串?

标签 string-comparison elm

我有一个我正在制作的小项目的所有神奇宝贝的列表。现在我添加了一个搜索框,您可以在其中输入神奇宝贝的名称。我想根据搜索字符串对神奇宝贝列表进行排序。

例如,如果我搜索“bul”,我希望“Bulbasaur”位于顶部,然后是“Snubbull”和“Granbull”(因为他们的名字中也有“bul”),之后例如“Wobbufet”(因为他的名字中有“bu”)名称)。

我可以使用哪种字符串比较来实现此目的?

注意:我在 Elm 中工作,所以如果 Elm 中有一个解决方案那就太好了,但问题主要只是一般性的。

最佳答案

您可以构建一个函数,为列表中的每个项目分配权重,然后按该权重进行排序。您可以创建一个带有签名的函数:

assignWeight : String -> String -> (Int, String)
assignWeight typed listItem = ...

然后,该函数可以分配一个数值并将其作为元组的第一项返回,而原始值作为元组中的第二项。

然后您只需构建加权算法,并且这些规则必须根据您的要求来决定。

例如,您可以指定完全匹配 100。您可以指定部分匹配某个值,该值取决于键入的字符串匹配的数量以及实际匹配的字符数。您可以将 Regex 库用于所有这些场景,并使用 escape 函数构建部分正则表达式。

例如,完全匹配正则表达式可以定义为:

exactMatcher typed =
  caseInsensitive <| regex <| "^" ++ escape typed ++ "$"

部分匹配可能是:

partialMatcher =
  caseInsensitive << regex << escape

当您使用partialMatcher正则表达式时,您可以使用返回的Match index 值来确定匹配发生在字符串中的深度。

您甚至可以对键入的输入的每个变体进行部分匹配(例如 "bul""bu""b"),并将其纳入您的权重分数中。

最终,您可以使用 List.sortByfst 来使用您的排序算法:

List.sortBy (fst << assignWeight "bu") pokemon

关于string-comparison - 比较字符串和搜索字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36112831/

相关文章:

list - 如何为 Grid (2d List) 类型制作 indexedMap 函数?

Elm:如果结构是动态的(具有不同的深度),如何更新 Dict 内部的 Dict?

string-comparison - strcmp() 为相同的字符串比较返回不同的值

c++ - 如何在C++中比较两个结构字符串

javascript - iOS 上的语言环境比较

functional-programming - Elm 中是否有等效的 JavaScript reload()

c# - .NET 编译器如何比较两个字符串?

c++ - strcmp() 的问题没有正确比较字符串

elm - Elm 0.18 中的本地范围更新