【发布时间】:2021-06-14 07:51:35
【问题描述】:
让我们考虑一个列表:
List<String> recipeNamesList = [
'Burger',
'French Fries',
'Pizza',
'Bengali Lamb Curry',
'Chingri Malai Curry',
]
如果用户搜索Bengali Lamb Fries,我需要返回Bengali lamb curry和French Fries。
Benagli Lamb Curry 的排名最高,因为它有 2 个匹配的单词,而French Fries 只有一个匹配的单词。
所以返回的列表会是这样的:
List<String> result = [
'Bengali Lamb Curry',
'French Fries'
]
我当前的代码:
Future<List<String>> getSuggestions(String search) async {
List<String> results = [];
List<String> searchSplit =
search.toLowerCase().split(" "); // split the search query
for (int i = 0; i < searchSplit.length; i++) {
// iterate over search query
for (int j = 0; j < recipeNamesList.length; j++) {
// iterate over the recipe names list
List<String> recipeNamesListSplit =
recipeNamesList[j].split(" "); // split the recipe names
for (int k = 0; k < recipeNamesListSplit.length; k++) {
// iterate over the list of splitted name
if (recipeNamesListSplit[k]
.toLowerCase()
.startsWith(searchSplit[i])) {
// convert to lower case and check if the query is present in splitted name
results
.add(recipeNamesList[j]); // if contains == true add to results
}
}
}
}
// Avoid repeated values
results = results.toSet().toList();
return results;
}
这是一个完全临时的,仅当查询词出现在recipeNamesList 中时才匹配。如果是这样,请将它们添加到 results 列表中。它不会对哪个食谱与搜索查询中的匹配词最多进行排名。
我应该如何排名?我当前的代码是否可以修改?还是我需要完全更改我的代码?
【问题讨论】:
标签: algorithm flutter dart search ranking