Как также упоминал 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();
}
}
Я разделил logi c вашего кода на две части.
searchParamWord
берет одно слово и разбивает его на компоненты, такие как «(t, te, tes, test)» и возвращает итератор с отложенной оценкой. Позже этот итератор может быть использован expand
в setSearchParam
, где мы разбиваем длинный String
на каждое отдельное слово.