Algorithm 颤振中的多词搜索

Algorithm 颤振中的多词搜索,algorithm,flutter,dart,Algorithm,Flutter,Dart,假设我有一个叫大蒜帕尔玛干酪黄油的食谱。当找到合适的名称时,我需要返回一个对象。 现在,在一个简单的临时解决方案中,我可以通过以下方式进行搜索: class SearchRecipe { late RecipeModel recipe; RecipeModel returnRecipe(String? suggestion) { for (int i = 0; i < Store.instance.getAllRecipes().length; i++) { i

假设我有一个叫大蒜帕尔玛干酪黄油的食谱。当找到合适的名称时,我需要返回一个对象。 现在,在一个简单的临时解决方案中,我可以通过以下方式进行搜索:

class SearchRecipe {
  late RecipeModel recipe;
  RecipeModel returnRecipe(String? suggestion) {
    for (int i = 0; i < Store.instance.getAllRecipes().length; i++) {
      if (suggestion == Store.instance.getAllRecipes()[i].recipeName) {
        return Store.instance.getAllRecipes()[i];
      }
    }
    return recipe;
  }
}

在空格处拆分用户输入。然后你有一个清单。您可以查看列表,并根据您的偏好实施各种行为

如果找到列表中的所有单词,则可以进行匹配。如果至少有一个单词匹配,则可以返回

您可以优先选择包含更多的单词,也可以检查单词的顺序

在这两种情况下,您也不会检查是否相等,而是使用诸如includes/contains之类的函数来检查搜索的单词是否是名称的一部分


(检查顺序可以通过记住您已经识别的单词并只搜索找到的单词来完成。在您的示例中,您会找到“大蒜”,然后您只需查看“Paremasan Butter”并尝试查找“Butter”)

在空格处拆分用户输入。然后你有一个清单。您可以查看列表,并根据您的偏好实施各种行为

如果找到列表中的所有单词,则可以进行匹配。如果至少有一个单词匹配,则可以返回

您可以优先选择包含更多的单词,也可以检查单词的顺序

在这两种情况下,您也不会检查是否相等,而是使用诸如includes/contains之类的函数来检查搜索的单词是否是名称的一部分

(检查顺序可以通过记住您已经识别的单词并只搜索找到的单词来完成。在您的示例中,您会找到“大蒜”,然后您只需查看“Paremasan黄油”并尝试查找“黄油”)

字符串搜索=“大蒜黄油”;
列表=[
“蒜味意大利干酪”,
“黄油”,
“大蒜”,
“黄油蒜”,
“Paremasan”,
“堆栈溢出”
];
列出结果=[];
search.split(“”).forEach((s){
results.addAll(list.where((element)=>element.contains));
});
//避免重复值
结果=results.toSet().toList();
字符串搜索='大蒜黄油';
列表=[
“蒜味意大利干酪”,
“黄油”,
“大蒜”,
“黄油蒜”,
“Paremasan”,
“堆栈溢出”
];
列出结果=[];
search.split(“”).forEach((s){
results.addAll(list.where((element)=>element.contains));
});
//避免重复值
结果=results.toSet().toList();

首先拆分输入文本

var string = "Hello world!";
string.split(" ");  
// ['Hello', 'world!'];
然后迭代上面数组中的每个单词,检查上面的 Store.instance.getAllRecipes()[i].recipeName包含上述单词

if(str.equalsIgnoreCase(str))
{
      //remaining code
}
try包含方法

.contains()

首先拆分输入文本

var string = "Hello world!";
string.split(" ");  
// ['Hello', 'world!'];
然后迭代上面数组中的每个单词,检查上面的 Store.instance.getAllRecipes()[i].recipeName包含上述单词

if(str.equalsIgnoreCase(str))
{
      //remaining code
}
try包含方法

.contains()

您是否尝试过.contains()?@pskink I实际上集成了用于前缀匹配的trie,您提供的解决方案单独工作,但与我实现的trie不兼容。你想看看吗?也许你会更好地理解我面临的问题?@pskink另一个问题是我使用的是对象列表,而不是字符串列表,所以我认为我在这种情况下犯了一些错误。你尝试过了吗。contains()?@pskink I实际上集成了用于前缀匹配的trie,您提供的解决方案单独起作用,但与我实现的trie不同。你想看看吗?也许你会更好地理解我面临的问题?@pskink另一个问题是,我使用的是对象列表,而不是字符串列表,因此我认为在这种情况下,我在编写
孟加拉咖喱时没有返回
孟加拉羔咖喱
。我已经编辑了我的帖子,请让我知道我是否做对了,只是做了一个测试,效果很好。编写以下函数并尝试使用Hi@linesOfCode。请原谅我的愚蠢。但正如您所看到的,我有一个对象列表,在将配方名称与用户查询匹配之前,我必须迭代
配方
长度。所以你编写代码的方式似乎对我不起作用。有什么建议吗?为什么不从
Store.instance.getAllRecipes()
中为
执行一个简单的
循环,并将
recipeName
放入我给出的
列表中作为示例?然后一切都会像我的样品一样工作。你需要应用一些标准(排名很好)2。您应该删除(修剪)所有前后空格。当我写孟加拉咖喱时,不要返回
孟加拉羔羊咖喱
。我已经编辑了我的帖子,请让我知道我是否做对了,只是做了一个测试,效果很好。编写以下函数并尝试使用Hi@linesOfCode。请原谅我的愚蠢。但正如您所看到的,我有一个对象列表,在将配方名称与用户查询匹配之前,我必须迭代
配方
长度。所以你编写代码的方式似乎对我不起作用。有什么建议吗?为什么不从
Store.instance.getAllRecipes()
中为
执行一个简单的
循环,并将
recipeName
放入我给出的
列表中作为示例?然后一切都会像我的样品一样工作。你需要应用一些标准(排名很好)2。您应该删除(修剪)所有前后空格。