Show("ΠΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° setB: ", setB);
setA.SymmetricExceptWith(setB);
Show("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° setA ΠΏΠΎΡΠ»Π΅ " +
"ΡΠ°Π·Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΡΡΠΈ ΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ SetB: ", setA);
setA.UnionWith(setB);
Show("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° setA ΠΏΠΎΡΠ»Π΅ " +
"ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ SetB: ", setA);
setA.ExceptWith(setB);
Show("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° setA ΠΏΠΎΡΠ»Π΅ " +
"Π²ΡΡΠΈΡΠ°Π½ΠΈΡ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° setB: ", setA);
Console.WriteLine();
}
}
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°.
ΠΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° setA: A B C
ΠΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° setB: Π‘ D Π
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° setA ΠΏΠΎΡΠ»Π΅ ΡΠ°Π·Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΡΡΠΈ ΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ SetB: Π Π D Π
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° setA ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ SetB: Π Π D Π Π‘
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° setA ΠΏΠΎΡΠ»Π΅ Π²ΡΡΠΈΡΠ°Π½ΠΈΡ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° setB: Π Π
ΠΠ»Π°ΡΡ SortedSet<T> ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½ΠΎΠ²ΡΡ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, Π²Π²Π΅Π΄Π΅Π½Π½ΡΡ Π² Π²Π΅ΡΡΠΈΡ 4.0 ΡΡΠ΅Π΄Ρ .NET Framework. Π Π½Π΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ°Ρ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ. Π ΠΊΠ»Π°ΡΡΠ΅ SortedSet<T> ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ISet<T>, ICollection, ICollection<T>, IEnumerable, IEnumerable<T>, ISerializable, Π° ΡΠ°ΠΊΠΆΠ΅ IDeserializationCallback. Π ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΡΠΈΠΏΠ° SortedSet<T> ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ, Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ. ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΡ Π² ΡΠ°ΠΊΠΎΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ. Π ΠΊΠ»Π°ΡΡΠ΅ SortedSet<T> ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ISet<T>, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ°Π·Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΡΡΡ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠΎΠΌΡ ΡΡΠΎ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΡΠΈΠΏΠ° SortedSet<T> ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΊΠ»Π°ΡΡ SortedSet<T> ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΌ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΠΈΠΏΠ° SortedSet<T> ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ ΠΈ ΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΡΡΠΎΠ±Ρ Π²ΠΌΠ΅ΡΡΠΈΡΡ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π² Π½Π΅ΠΉ Ρ ΡΠ°Π½ΠΈΡΡΡΡ.
ΠΠΈΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ ΡΠ΅ΡΡΡΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ SortedSet<T>.
public SortedSetO
public SortedSet(IEnumerable<T> collection)
public SortedSet(IComparer comparer)
public SortedSet(IEnumerable<T> collection, IComparer comparer)
Π ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠΎΡΠΌΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΡΡΡΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ, Π° Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠΎΡΠΌΠ΅ β ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ, ΡΠΎΡΡΠΎΡΡΠ΅Π΅ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ collection. Π ΡΡΠ΅ΡΡΠ΅ΠΉ ΡΠΎΡΠΌΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΏΠΎΡΠΎΠ± ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° comparer. Π Π² ΡΠ΅ΡΠ²Π΅ΡΡΠΎΠΉ ΡΠΎΡΠΌΠ΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ, ΡΠΎΡΡΠΎΡΡΠ΅Π΅ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ collection, ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π·Π°Π΄Π°Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ comparer. ΠΠΌΠ΅Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΡΠ°Ρ ΡΠΎΡΠΌΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ.
Π ΠΊΠ»Π°ΡΡΠ΅ SortedSet<T> ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ISet<T>, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π² Π½Π΅ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°ΠΌΠΈ. Π ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄ GetViewBetween(), Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΡΠ°ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π² ΡΠΎΡΠΌΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠΏΠ° SortedSet<T>, ΠΌΠ΅ΡΠΎΠ΄ RemoveWhere(), ΡΠ΄Π°Π»ΡΡΡΠΈΠΉ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π½Π΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄ Reverse(), Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° IEnumerable<T>, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΠΎΠΌΠΈΠΌΠΎ ΡΠ²ΠΎΠΉΡΡΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ SortedSet<T>, Π² Π½Π΅Π³ΠΎ Π²Π²Π΅Π΄Π΅Π½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅.
public IComparer<T> Comparer { get; }
public T Max { get; }
public T Min { get; }
Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ Comparer ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΏΠΎΡΠΎΠ± ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°. Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ ΠΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅, Π° ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Min β Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° SortedSet<T> Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ HashSet Π½Π° SortedSet Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π°, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌ ΡΠΈΠΏΠ° HashSet<T>.
ΠΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ
Π Π²Π΅ΡΡΠΈΡ 4.0 ΡΡΠ΅Π΄Ρ .NET Framework Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ System.Collections.Concurrent. ΠΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π³Π΄Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ Π΄Π²ΡΡ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠΈΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ ΠΊΠ»Π°ΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ.
ΠΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½Π°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ - ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
BlockingCollection<T> - ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° IProducerConsumerCollection<T>
ConcurrentBag<T> - ΠΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π½Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° IProducerConsumerCollection<T>, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΠΎΠΉ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π²ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΈ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅
ConcurrentDictionary<TKey, TValue> - Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΏΠ°ΡΡ βΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅", Π° Π·Π½Π°ΡΠΈΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ
ConcurrentQueue<T> - Π Π΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° IProducerConsumerCollection<T>
ConcurrentStack<T> - Π Π΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΉ ΡΡΠ΅ΠΊ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° IproducerConsumerCollection<T>
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠ°Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IProducerConsumerCollection. ΠΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ System.Collections.Concurrent. ΠΠ½ ΡΠ»ΡΠΆΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² IEnumerable, IEnumerable<T> ΠΈ ICollection. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² Π½Π΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ TryAdd() ΠΈ TryTake(), ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½ "ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊ-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ". (ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½ "ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊ-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ" ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π²ΡΡ Π·Π°Π΄Π°Ρ. ΠΠ΅ΡΠ²Π°Ρ Π·Π°Π΄Π°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, Π° Π΄ΡΡΠ³Π°Ρ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅Ρ ΠΈΡ .) ΠΠ΅ΡΠΎΠ΄ TryAdd() ΠΏΡΡΠ°Π΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, Π° ΠΌΠ΅ΡΠΎΠ΄ TryTake() β ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΡΠΎΡΠΌΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΠΎΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
bool TryAdd(Π’ item)
bool TryTake(out T item)
ΠΠ΅ΡΠΎΠ΄ TryAdd() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, Π΅ΡΠ»ΠΈ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ item. Π ΠΌΠ΅ΡΠΎΠ΄ TryTake() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, Π΅ΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ item ΡΠ΄Π°Π»Π΅Π½ ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ. ΠΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ TryAdd() Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ item Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ. (ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ IProducerConsumerCollection ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ°Π΅ΠΌΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Π° CopyTo(), ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ICollection, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π’ΠΎΠΠ³Π³Π°Ρ(), ΠΊΠΎΠΏΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ².)
ΠΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ Π·Π°ΡΠ°ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΡ Π·Π°Π΄Π°Ρ (TPL) ΠΈΠ»ΠΈ ΡΠ·ΡΠΊΠΎΠΌ PLINQ. Π ΡΠΈΠ»Ρ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ° ΡΡΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ Π²ΡΠ΅ ΠΈΡ ΠΊΠ»Π°ΡΡΡ Π½Π΅ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π΄Π°Π»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π΄Π°Π½ ΠΊΡΠ°ΡΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ ΠΊΠ»Π°ΡΡΠ° BlockingCollection<T>. Π£ΡΠ²ΠΎΠΈΠ² ΠΎΡΠ½ΠΎΠ²Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° BlockingCollection<T>, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π±Π΅Π· ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΡΡΡΠ΄Π° ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ ΠΈ Π² ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠ°Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ.
Π ΠΊΠ»Π°ΡΡΠ΅ BlockingCollection<T>, ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π² ΡΠ°ΠΊΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π»ΡΠ±ΡΡ ΠΏΠΎΠΏΡΡΠΎΠΊ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΏΡΡΠΎΠΊ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΏΡΡΡΠ°. ΠΡΠΎ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ΅Ρ ΡΠΈΡΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ°Π±Π»ΠΎΠ½Π° "ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊ-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ". Π ΠΊΠ»Π°ΡΡΠ΅ BlockingCollection<T> ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ICollection, IEnumerable, IEnumerable<T>, Π° ΡΠ°ΠΊΠΆΠ΅ IDisposable.
Π ΠΊΠ»Π°ΡΡΠ΅ BlockingCollection<T> ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ.
public BlockingCollection()
public BlockingCollection(int boundedCapacity)
public BlockingCollection(IProducerConsumerCollection<T> collection)
public BlockingCollection(IProducerConsumerCollection<T> collection,
int boundedCapacity)
Π Π΄Π²ΡΡ ΠΏΠ΅ΡΠ²ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°Ρ Π² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ ΠΊΠ»Π°ΡΡΠ° BlockingCollection<T> Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΡΠ²Π»ΡΡΡΠ°ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠΏΠ° ConcurrentQueue<T>. Π Π² Π΄Π²ΡΡ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° Π² ΠΎΡΠ½ΠΎΠ²Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΡΠΈΠΏΠ° BlockingCollection<T>. ΠΡΠ»ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ boundedCapacity, ΡΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½Π° ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ boundedCapacity Π½Π΅ ΡΠΊΠ°Π·Π°Π½, ΡΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ.