比较字符串到搜索字符串?

时间:2016-03-20 10:51:57

标签: string-comparison elm

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

例如,如果我搜索“bul”,我会期望“ Bul basaur”位于顶部,然后是“Snub bul l” “Gran bul l”(因为他们的名字中也有“bul”),之后例如“Wob bu fet”(因为他的“bu”中有“bu”)名称)。

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

注意:我在榆树工作,所以如果在Elm中有一个解决方案会很好,但问题主要是一般的。

1 个答案:

答案 0 :(得分:2)

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

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

然后,此函数可以指定一个数值并将其作为元组的第一项返回,原始值作为元组中的第二项。

然后你必须建立你的加权算法,这些规则必须由你的要求决定。

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

例如,完全匹配Regex可以定义为:

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

部分匹配可以是:

partialMatcher =
  caseInsensitive << regex << escape

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

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

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

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