You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中高效检测学生列表重复地址并获取对应对象的方法

高效筛选含重复地址的Student对象

要替代嵌套循环实现更高效的筛选,核心思路是用哈希表统计地址的出现频次,分两步完成:

  • 第一步:遍历所有学生的地址,用哈希表记录每个地址出现的次数
  • 第二步:再次遍历学生列表,只要该学生的地址中存在任意一个出现次数大于1的地址,就将其保留

JavaScript 实现示例

const students = [
  { ID: 1, Addresses: ["SRJ", "SJ"] },
  { ID: 2, Addresses: ["SJ"] },
  { ID: 3, Addresses: ["FRT", "FRI"] },
  { ID: 4, Addresses: ["NR", "SJ"] }
];

// 统计每个地址的出现频次
const addressCount = {};
students.forEach(student => {
  student.Addresses.forEach(addr => {
    addressCount[addr] = (addressCount[addr] || 0) + 1;
  });
});

// 筛选包含重复地址的学生
const duplicateAddressStudents = students.filter(student => {
  return student.Addresses.some(addr => addressCount[addr] > 1);
});

console.log(duplicateAddressStudents);

Python 实现示例

students = [
    {"ID": 1, "Addresses": ["SRJ", "SJ"]},
    {"ID": 2, "Addresses": ["SJ"]},
    {"ID": 3, "Addresses": ["FRT", "FRI"]},
    {"ID": 4, "Addresses": ["NR", "SJ"]}
]

# 统计地址出现频次
address_count = {}
for student in students:
    for addr in student["Addresses"]:
        address_count[addr] = address_count.get(addr, 0) + 1

# 筛选目标学生
result = [student for student in students if any(address_count[addr] > 1 for addr in student["Addresses"])]

print(result)

复杂度说明

这种实现的时间复杂度为 O(M),其中M是所有学生的地址总数量。相比嵌套循环的O(N²)(N为学生数量),在数据量较大时性能提升非常明显,因为哈希表的读写操作都是O(1)的常数时间。

内容的提问来源于stack exchange,提问作者learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:41:02