<ul class="menu-l1">
<li><a href="#">first menu</a>
<div class="details">
<div>header</div>
<ul class="menu-l2">
<li><a href="#">sub</a></li>
<li><a href="#">sub long</a></li>
</ul>
</div>
</li>
<li><a href="#">second menu</a>
<div class="details">
<div>2 header</div>
<ul class="menu-l2">
<li><a href="#">1 sub-menu long</a></li>
<li><a href="#">2 sub-menu</a></li>
</ul>
</div>
</li>
</ul>
在我编写代码后,我意识到我需要向public IEnumerable<SummaryItem> GetSummaryData(SummarySettings settings)
{
return GetSummaryReportData(startTime, endTime, settings.AgentIds);
}
添加一些ids
。
所以我做了以下
settings.AgentIds
如何改进我的算法以组合两个集合?
也许没有创建public IEnumerable<SummaryItem> GetSummaryData(SummarySettings settings)
{
if (settings.LabelIds != null && settings.LabelIds.Any())
{
var labelGroups = _agentsGroupsStorage.Values.Where(x => settings.LabelIds.Contains(x.Id));
var labelAgentIds = labelGroups.SelectMany(x => x.AgentIds); // IEnumerable<Guid>
settings.AgentIds = new GuidCollection(labelAgentIds.Union(settings.AgentIds).ToList());
}
return GetSummaryReportData(startTime, endTime, settings.AgentIds);
}
?或者我需要使用new GuidCollection
而不是Aggregate
?
答案 0 :(得分:3)
以下是联盟的大致实施:
public IEnumerable<T> Union(this IEnumerable<T> left, IEnumerable<T> right)
{
var hs=new Hashset<T>(left);
for(var item in right)
{
hs.Add(item);
}
return hs;
}
如您所见,它使用基于集合的集合来建立联合。这利用了哈希表的速度,使操作确实非常高效。有可能通过预先知道您要收集的数据来制定更优化的解决方案,但在一般情况下,这是最快的。