我正在编写的代码将从数组 ApiIds 中选择不是结果对象的属性ApiId的字符串键。
我写了下面的代码,但它对我来说看起来多余,有没有办法将它组合成一个语句而不是将对象的HashSet转换为另一个字符串的HashSet?
var resultsCached = new HashSet<string>(results.Select(x => x.ApiId));
var missingResults = apiIds.Select(x => !resultsCached.Contains(x));
感谢。
答案 0 :(得分:8)
Except
会为您提供不在其他系列中的项目:
var missingResults = apiIds.Except(results.Select(x => x.ApiId));
答案 1 :(得分:1)
另一种有效的O(n)方法是使用HashSet.ExceptWith
删除集合中第二个序列中的所有元素:
HashSet<string> apiIdSet = new HashSet<string>(apiIds);
apiIdSet.ExceptWith(results.Select(x => x.ApiId));
该集仅包含现在不在results
的字符串。