将字符串与搜索字符串进行比较?
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.sortBy
和 fst
来使用您的排序算法:
List.sortBy (fst << assignWeight "bu") pokemon
我有一个我正在做的小项目的所有神奇宝贝的列表。现在我添加了一个搜索框,您可以在其中输入神奇宝贝的名字。我想根据搜索字符串对我的神奇宝贝列表进行排序。
例如,如果我搜索 "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.sortBy
和 fst
来使用您的排序算法:
List.sortBy (fst << assignWeight "bu") pokemon