如何快速实现数组中包含用户输入子串的元素匹配查询
子串匹配过滤实现方案
这个需求的核心逻辑是遍历数组元素,逐一判断是否包含用户输入的子串,收集符合条件的元素即可。主流编程语言都内置了原生的子串判断方法,无需手动实现匹配逻辑,普通场景下性能完全够用。
核心实现步骤
- 可选:根据业务需求决定是否做大小写兼容,需要不区分大小写匹配时,可先将用户输入和数组元素统一转为小写/大写
- 遍历目标数组的所有字符串元素
- 调用原生方法判断当前元素是否包含输入子串
- 汇总所有符合条件的元素作为返回结果
常见编程语言实现示例
Python 实现
区分大小写版本:
def filter_by_substring(input_str: str, str_array: list[str]) -> list[str]: return [item for item in str_array if input_str in item]
不区分大小写版本:
def filter_by_substring(input_str: str, str_array: list[str]) -> list[str]: lower_input = input_str.lower() return [item for item in str_array if lower_input in item.lower()]
测试示例:
输入input_str = "Ai",数组["Airplane", "Air", "Airport", "Airfield", "Banana", "Apple"],返回结果为["Airplane", "Air", "Airport", "Airfield"],完全匹配需求示例。
JavaScript 实现
区分大小写版本:
function filterBySubstring(inputStr, strArray) { return strArray.filter(item => item.includes(inputStr)) }
不区分大小写版本:
function filterBySubstring(inputStr, strArray) { const lowerInput = inputStr.toLowerCase() return strArray.filter(item => item.toLowerCase().includes(lowerInput)) }
Java 实现
区分大小写版本:
import java.util.List; import java.util.stream.Collectors; public class SubstringFilter { public List<String> filterBySubstring(String inputStr, List<String> strArray) { return strArray.stream() .filter(item -> item.contains(inputStr)) .collect(Collectors.toList()); } }
特殊场景优化
如果数组元素量级超过10万、且需要频繁执行匹配查询,可以提前构建前缀树(字典树)索引,查询效率会比遍历判断高1-2个数量级,普通小数据量场景直接用上述原生方法即可。
内容的提问来源于stack exchange,提问作者Quentiuz
相关产品推荐
相关产品推荐

