下面的代码片段用另一个过滤
IEnumerable
,用作黑名单。过滤后的集合会迭代远程获取的内容(延迟加载、YouTube Api)。
IEnumerable<string> contentThatCanBeHuge = this.FetchContentThatCanBeHuge();
IEnumerable<string> blackListContent = this.FetchBlackListContent();
return contentThatCanBeHuge.Where(x => !blackListContent.Contains(x.Id));
IEnumerable.Contains()
方法的时间复杂度为O(n)
,因此IEnumerable.Where()
调用可能需要一段时间。
另一方面,
HashSet.Contains()
是O(1)
。从 HashSet
实例化 IEnumerable
似乎是 O(n)
。
如果黑名单即将被多次使用,并且不考虑空间复杂度,那么在使用之前将其变成
HashSet
是一个好方法还是这只是过早的优化?