Flutter如何实现字符串列表的无序关键词搜索?
Flutter 实现无序关键词的列表搜索
要实现不要求关键词顺序的搜索,核心思路是把搜索词拆分成独立关键词,再检查列表项是否包含所有关键词(加入大小写不敏感处理更贴合实际使用场景)。
具体实现步骤
- 处理搜索输入:将搜索字符串按空格分割成关键词数组,同时统一转为小写(避免大小写差异导致匹配失败)。
- 过滤原列表:遍历每个列表项,将其也转为小写后,验证是否包含所有拆分后的关键词。
代码示例
List<String> a = [ "Fracture of right arm", "Fracture of left arm", "Fracture of right leg", "Fracture of left leg", ]; String searchQuery = "fracture right"; // 拆分关键词并统一转为小写(兼容多空格分隔的情况) List<String> keywords = searchQuery.toLowerCase().split(RegExp(r'\s+')); // 过滤列表,保留包含所有关键词的项 List<String> results = a.where((item) { String lowerCaseItem = item.toLowerCase(); return keywords.every((keyword) => lowerCaseItem.contains(keyword)); }).toList(); // 打印结果 print(results);
结果验证
输入fracture right时,代码会返回:
[Fracture of right arm, Fracture of right leg]
扩展优化
- 若需要支持模糊前缀匹配(比如输入
frac rig也能匹配结果),可以把contains替换为startsWith或正则表达式匹配,但要注意大量数据下的性能问题。 - 如需处理带空格的完整关键词(比如搜索
"right arm"),可以调整拆分逻辑,支持用引号包裹的内容作为单个关键词,这属于进阶场景,基础搜索用空格拆分即可满足需求。
内容的提问来源于stack exchange,提问作者devsdocs
相关产品推荐
相关产品推荐

