Firebase 任何人都可以在dart中优化此代码。我正在为每个单词制作搜索过滤器

Firebase 任何人都可以在dart中优化此代码。我正在为每个单词制作搜索过滤器,firebase,flutter,search,dart,firebase-realtime-database,Firebase,Flutter,Search,Dart,Firebase Realtime Database,我需要为firebase添加搜索过滤器,以便轻松准确地获得搜索结果 我在这里修改代码 void main(){ 打印(setSearchParam(“Dr apj abdul Kalam”); } setSearchParam(字符串案例编号){ List caseSearchList=List(); 字符串temp=“”; 字符串temp2=“”; 字符串temp3=“”; if(caseNumber.split(“”)长度>1){ 字符串firstWord=caseNumber.split(

我需要为firebase添加搜索过滤器,以便轻松准确地获得搜索结果

我在这里修改代码

void main(){
打印(setSearchParam(“Dr apj abdul Kalam”);
}
setSearchParam(字符串案例编号){
List caseSearchList=List();
字符串temp=“”;
字符串temp2=“”;
字符串temp3=“”;
if(caseNumber.split(“”)长度>1){
字符串firstWord=caseNumber.split(“”[0];
字符串secondWord=caseNumber.split(“”[1];
字符串thirdWord=caseNumber.split(“”[2];
for(int i=0;i
输出类似于每个单词字母的列表=[D,Dr,a,ap,apj,a,ab,abd,abdu,abdul]

我正在将这些列表推送到firebase,这样我就可以很容易地获得搜索结果。。。 如果有在firebase搜索的替代方案,请让我知道


如果还有人不理解我的问题,请查看我上面提供的链接。

正如jamesdlin也提到的,您的代码可以进行大量优化

我尝试在这里制作一个更优化的版本,它也适用于任何大小和任意字数的字符串:

void main() {
  print(setSearchParam("Dr apj abdul Kalam"));
  // [D, Dr, a, ap, apj, a, ab, abd, abdu, abdul, K, Ka, Kal, Kala, Kalam]

  print(searchParamWord('test'));
}

List<String> setSearchParam(String caseNumber) =>
    caseNumber.split(' ').expand(searchParamWord).toList();

Iterable<String> searchParamWord(String word) sync* {
  final sb = StringBuffer();

  for (var i = 0; i < word.length; i++) {
    yield (sb..writeCharCode(word.codeUnitAt(i))).toString();
  }
}
void main(){
打印(setSearchParam(“Dr apj abdul Kalam”);
//[D,Dr,a,ap,apj,a,ab,abd,abdu,abdul,K,Ka,Kal,Kala,Kalam]
打印(searchParamWord(‘test’);
}
列表setSearchParam(字符串caseNumber)=>
caseNumber.split(“”).expand(searchParamWord.toList();
Iterable searchParamWord(字符串字)同步*{
最终sb=StringBuffer();
for(变量i=0;i
我已经将代码的逻辑分为两部分


searchParamWord
获取一个单词并将其拆分为其组件,如“(t,te,tes,test)”并返回一个惰性计算迭代器。然后,在
setSearchParam
中,我们可以使用该迭代器,将长
字符串拆分为每个单独的单词。

1。你的帖子会更适合你。2.不要对
caseNumber.split(“”)进行相同的调用。2.创建一个函数来返回给定字符串的所有前缀列表,这样就不需要该代码的四个副本。3.处理
split()?而是迭代每个单词,对每个单词调用helper函数,并合并前缀列表。(如果希望避免单独的合并步骤,也可以将helper函数直接附加到现有列表中。)
void main() {
  print(setSearchParam("Dr apj abdul Kalam"));
  // [D, Dr, a, ap, apj, a, ab, abd, abdu, abdul, K, Ka, Kal, Kala, Kalam]

  print(searchParamWord('test'));
}

List<String> setSearchParam(String caseNumber) =>
    caseNumber.split(' ').expand(searchParamWord).toList();

Iterable<String> searchParamWord(String word) sync* {
  final sb = StringBuffer();

  for (var i = 0; i < word.length; i++) {
    yield (sb..writeCharCode(word.codeUnitAt(i))).toString();
  }
}