C#中如何对比字符串数组与自定义类型集合并返回匹配对应字段值
实现方案
核心思路
- 先将array2转换为
firstName到lastName的哈希映射(字典),避免每次匹配都遍历整个array2,时间复杂度从O(n*m)优化到O(n+m) - 遍历array1的每个元素,从映射中取出匹配到的
lastName,过滤掉无匹配的项即可得到结果
代码实现
TypeScript/JavaScript 版本
// 定义Person类型 type Person = { firstName: string; lastName: string; } const array1 = ["A", "B", "C", "D", "E"]; const array2: Person[] = [ { firstName: "A", lastName: "Sam" }, { firstName: "B", lastName: "Mark" }, { firstName: "X", lastName: "Steve" }, { firstName: "E", lastName: "Mike" } ]; // 生成firstName到lastName的映射表 const nameMap = new Map(array2.map(item => [item.firstName, item.lastName])); // 匹配取值 const result = array1.filter(key => nameMap.has(key)).map(key => nameMap.get(key)!); console.log(result); // 输出 ["Sam", "Mark", "Mike"]
如果是小数据量场景,也可以用简化写法:
const result = array2.filter(item => array1.includes(item.firstName)).map(item => item.lastName)
Python 版本
array1 = ["A", "B", "C", "D", "E"] array2 = [ {"firstName": "A", "lastName": "Sam"}, {"firstName": "B", "lastName": "Mark"}, {"firstName": "X", "lastName": "Steve"}, {"firstName": "E", "lastName": "Mike"} ] # 生成映射字典 name_map = {item["firstName"]: item["lastName"] for item in array2} # 匹配取值 result = [name_map[key] for key in array1 if key in name_map] print(result) # 输出 ['Sam', 'Mark', 'Mike']
特殊场景说明
如果array2存在多个相同firstName的元素,上述实现默认取最后一个出现的元素的lastName,如果需要保留所有匹配项,直接使用过滤遍历的写法即可。
内容的提问来源于stack exchange,提问作者xtc
相关产品推荐
相关产品推荐

