将字符串与搜索字符串进行比较?

Comparing strings to search string?

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

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

我可以为此使用哪种字符串比较?

注意:我在 Elm 工作,所以如果 Elm 中有解决方案就好了,但问题主要是笼统的。

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

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

此函数然后可以分配一个数值,return它作为元组的第一项,原始值作为元组的第二项。

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

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

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

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

而部分匹配可能是:

partialMatcher =
  caseInsensitive << regex << escape

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

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

在一天结束时,您可以使用 List.sortByfst 来使用您的排序算法:

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