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();
}
}
}
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();
}
}
}