gpt4 book ai didi

c# - 如何有效地合并两个集合?

转载 作者:太空狗 更新时间:2023-10-30 01:02:41 37 4
gpt4 key购买 nike

我有以下算法来找到两个集合的并集。

IEnumerable<IGroup> labelGroups = _agents.Where(x => settings.LabelIds.Contains(x.Id));
IEnumerable<Guid>labelAgentIds = labelGroups.SelectMany(x => x.AgentIds);

settings.AgentIds = new Collection<Guid>(labelAgentIds.Union(settings.AgentIds).ToList());

或者

IEnumerable<IGroup> labelGroups = _agents.Where(x => settings.LabelIds.Contains(x.Id));
agentIds = labelGroups.Aggregate(agentIds, (current, label) => current.Union(label.AgentIds));

我应该使用哪一个?帮我比较一下这个算法(速度和内存)。

最佳答案

为了获得最佳性能,首先将 settings.LabelIds 放入 HashSet

var labelIds = new HashSet<int>(settings.LabelIds);

然后使用哈希集进行快速查找O(1)

var labelAgentIds = _agents.Where(x => labelIds.Contains(x.Id)).SelectMany(x => x.AgentIds);

如果您知道 labelAgentIdssettings.AgentIds 永远不会有相同的 ID,您可以使用 Concat 否则使用 Union 以确保没有重复。

settings.AgentIds = new Collection<Guid>(labelAgentIds.Union(settings.AgentIds).ToList())

使用您的 Aggregate 方式会更慢。

关于c# - 如何有效地合并两个集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32780811/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com