Z listy można zrobić:Czy istnieje odpowiednik AddRange dla HashSet w C#
list.AddRange(otherCollection);
Nie ma metody zakres dodatek w HashSet. Jaki jest najlepszy sposób dodania innej kolekcji do HashSet?
Z listy można zrobić:Czy istnieje odpowiednik AddRange dla HashSet w C#
list.AddRange(otherCollection);
Nie ma metody zakres dodatek w HashSet. Jaki jest najlepszy sposób dodania innej kolekcji do HashSet?
Dla HashSet nazwa to UnionWith.
Ma to na celu wskazanie odmiennego sposobu działania HashSet. Nie możesz bezpiecznie "dodać" zestawu losowych elementów do niego, tak jak w kolekcjach, niektóre elementy mogą naturalnie wyparować.
myślę że UnionWith bierze swoją nazwę od "połączenia z inną HashSet", jednak nie ma przeciążenia dla IEnumerable też :)
Jest to jeden sposób:
public static class Extensions
{
public static bool AddRange<T>(this HashSet<T> @this, IEnumerable<T> items)
{
bool allAdded = true;
foreach (T item in items)
{
allAdded &= @this.Add(item);
}
return allAdded;
}
}
@quetzalcoatl brakowało oświadczenia zwrotu ... edytowane. – RoadieRich
Właśnie zauważyłem edycję :) Wystarczy FYI: zamiast używać operatora '?:', Proste 'added & = @ this.Add (item)' byłoby wystarczające i prawdopodobnie bardziej czytelne. Ale to tylko kosmetyki. – quetzalcoatl
@quetzalcoatl Właśnie o to pytałem, jest za wcześnie rano dla mnie. – RoadieRich
IMHO, 'HashSet' (i 'ISet') został utworzony z matematycznie ustalonym terminem. "UnionWith" był bliższym terminem. Z wyjĘ ... tkiem 'Z wyjĘ ... tkiem', który powinien być nazywane matematycznie mianem" Odejmij ". –