HashSet<T>
具有public int RemoveWhere(Predicate<T> match)
;
但是ImmutableHashSet<T>
没有。
我最终做了:
var x = ImmutableHashSet<int>.Empty.Add(5).Add(3);
var next = x.Where(i => i>4).ToImmutableHashSet();
哪个有效但很丑,主要是我不确定它的效率?
有更好的方法吗?
有ImmutableHashSet
没有RemoveWhere
的原因吗?
答案 0 :(得分:3)
我不知道为什么不这样做,但是您自己可以轻松地将copy the implementation作为扩展方法。您只需要将ImmutableHashSet
转换为ImmutableHashSet.Builder
,逻辑就可以完全相同。
namespace System.Collections.Immutable {
public static class ExtensionMethods {
public static ImmutableHashSet<T> RemoveWhere<T>(this ImmutableHashSet<T> hashSet, Predicate<T> match) =>
hashSet.RemoveWhere(match, out _);
public static ImmutableHashSet<T> RemoveWhere<T>(this ImmutableHashSet<T> hashSet, Predicate<T> match, out int numRemoved) {
if (match == null) throw new ArgumentNullException(nameof(match));
var hashSetBuilder = hashSet.ToBuilder();
numRemoved = 0;
foreach (var value in hashSet) if (match(value) && hashSetBuilder.Remove(value)) numRemoved++;
return hashSetBuilder.ToImmutable();
}
}
}