ImmutableHashSet 删除位置

ImmutableHashSet RemoveWhere

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 是什么原因?

我不知道为什么不行,但您很容易 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();
    }
  }
}