// ΠΡΠΎΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ
// ΠΌΠ°ΡΡΠΈΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Car ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ.
using System.Collections;
public class PetNameComparer : IComparer {
public PetNameComparer() {}
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
int IComΡΠ°rer.Compare(object o1, object o2) {
Car t1 = (Car)ΠΎ1;
Car t2 = (Car)o2;
return String.Compare (t1.petName, t2.petName);
}
}
ΠΡΠΎΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ»Π°ΡΡ System.Array ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Sort(), ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IComparer (ΡΠΈΡ. 7.11).
static void Main (string[] args) {
β¦
// Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ.
Array.Sort(myAutos, new Π Π΅tNameComparer());
// ΠΡΠ²ΠΎΠ΄ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°.
ConsolΠ΅.WriteLine("\nΠ£ΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ");
foreach(Car e in myAutos) Console.WriteLine("{0} {1}", c.ID, c.petName);
β¦
}
Π ΠΈΡ. 7.11. Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ
Π’ΠΈΠΏΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ, ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠΏΡ Car ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π² ΠΊΠ»Π°ΡΡ Car Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ SortByPetName(), Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ΅Π΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IComparer (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ PetNameComparer).
// ΠΠ΄Π΅ΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π΄Π»Ρ
// Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ "ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ" ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° IComparer.
public class Car: IComparable {
β¦
// Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ°ΡΠΎΡ SortByPetName.
public static IComparer SortByPetName { get { return (IComparer)new PetNameComparer(); } }
}
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π±Ρ ΡΠΎ Π½ΠΈ Π±ΡΠ»ΠΎ "ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ" ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΊΠ»Π°ΡΡΠ° PetNameComparer:
// Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅.
Array.Sort(myAutos, Car.SortByPetName);
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄. ΠΡΠΎΠ΅ΠΊΡ ComparableCar ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ Π² ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ Π³Π»Π°Π²Π΅ 7.
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ ΡΠΈΠΏΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π½ΠΎ ΠΈ ΡΠΎ, Π² ΡΠ΅ΠΌ ΠΈΡ ΠΏΠΎΠ»ΡΠ·Π°. ΠΡΠ΄ΡΡΠ΅ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΈΠ· Π³Π»Π°Π²Π½ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ .NET ΠΈ Π² Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² (ΠΈ Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ²) ΠΈΠ· ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ System.Collections.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈΠ· ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ System.Collections
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΡΡΠΏΠ°ΡΡ ΡΠΈΠΏ System.Array. Π Π³Π»Π°Π²Π΅ 3 Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ System.Array ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ΅Π»ΡΠΉ ΡΡΠ΄ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ (ΡΠ°ΠΊΠΈΡ , ΠΊΠ°ΠΊ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°, ΠΎΡΠΈΡΡΠΊΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅). ΠΠΎ ΠΊΠ»Π°ΡΡ Array ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΡΠΌ ΠΈΠ· Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠ»ΠΈ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ "Π³ΠΈΠ±ΠΊΠΈΠΉ" ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΏΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ System.Collections (ΠΈΠ»ΠΈ, Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΠΌΠΈ Π³Π»Π°Π²Ρ 10, ΠΈΠ· ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ System.Collections.Generic).
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ System.Collections ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ΅Π»ΡΠΉ ΡΡΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² (ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ). ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΡΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ. Π ΡΠ°Π±Π». 7.2. ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΠΎΡΠ½ΠΎΡΡΡΠΈΡ ΡΡ ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌ.
Π’Π°Π±Π»ΠΈΡΠ° 7.2. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ System.Collections
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ICollection ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ±ΡΠΈΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ (ΡΠ°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΡΡΡ ΡΡΠ΅ΡΡΠΈΠΊΠΎΠ² ΠΈ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ) Π΄Π»Ρ ΡΠΈΠΏΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ IComparer ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² IDictionary ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°Ρ ΠΈΠΌΠ΅Π½ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ IDictionaryEditor ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠΈΠΏΠ°, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ IDictionary IEnumerable ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IEnumerator Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° IEnumerator ΠΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΎΠ±ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠΈΠΏΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ foreach IHashCodeProvider ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Ρ Π΅Ρ-ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ IKeyComparer ΠΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΌ Π² .NET 2.0). ΠΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ IComparer ΠΈ IHashCodeProvider, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠΎ ΠΈΡ Ρ Π΅Ρ-ΠΊΠΎΠ΄Π°ΠΌ (Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ (ΡΠ°Π²Π½Ρ, ΡΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ Ρ Π΅Ρ-ΠΊΠΎΠ΄Ρ) IList ΠΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ, ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π½ΠΎΠ² ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΡΠ½ΠΈΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π΄Π°Π½Π½ΡΠΉ ΡΠΈΠΏ-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, ΠΈ ΠΈΠΌΠ΅Π΅Ρ Π»ΠΈ ΠΎΠ½ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅ΡΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΡΠ²ΡΠ·Π°Π½Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠ΅ΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠΌΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠ°ΠΌΠΈ. ΠΠ° ΡΠΈΡ. 7.12 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΡΡ Π΅ΠΌΠ° Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ (Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ ΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²).
Π ΠΈΡ. 7.12. ΠΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² System.Collections
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ICollection
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ICollection ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ System.Collections Π² ΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅, ΡΡΠΎ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π»ΡΠ±ΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ. ΠΠΎ ΡΡΡΠΈ, ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ·ΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ ΡΠ²ΠΎΠΉΡΡΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ: Π°) ΡΠΈΡΠ»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅; Π±) Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΡΡΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°; Π²) Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ Π² ΡΠΈΠΏ System.Array. Π€ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ICollection ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅ (ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ICollection ΡΠ°ΡΡΠΈΡΡΠ΅Ρ IEnumerable).
public interface ICollection : IEnumerable {
// Π§Π»Π΅Π½ IEnumerable.β¦
int Count { get; }
bool IsSynchronized { get; }
object SyncRoot { get; }
void CopyTo(Array array, int index);
}
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IDictionary
ΠΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΠ»ΠΎΠ²Π°ΡΡ - ΡΡΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΏΠ°Ρ ΠΈΠΌΠ΅Π½ ΠΈ ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠΈΠΏ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ IDictionary, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠΈΠΏΡ Car (Π·Π½Π°ΡΠ΅Π½ΠΈΡ) Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎ ID ΠΈΠ»ΠΈ petName (ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠΌΠ΅Π½). ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IDictionary ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° Keys ΠΈ Values, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Add(), Remove() ΠΈ Contains(). ΠΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ c ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΎΡΠ° ΡΠΈΠΏΠ°. ΠΠΎΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅.
public interface IDictionary : ICollection, IEnumerable {
bool IsFixedSize { get; }
bool IsReadOnly { get; }
object this [object key] { get; set; }
ICollection Keys { get; }
ICollection Values { get; }
void Add(object key, object value);
void Clear();
bool Contains(Object key);
IDictionaryEnumerator GetEnumerator();
void Remove(object key);
}
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IDictionaryEnumerator
ΠΡΠΈ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΡΡΠ΅Π½ΠΈΠΈ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ IDictionary.GetEnumerator() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ IDictionaryEnumerator. Π’ΠΈΠΏ IDictionaryEnumerator β ΡΡΠΎ ΡΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π½ΡΠΌΠ΅ΡΠ°ΡΠΎΡ, ΡΠ°ΡΡΠΈΡΡΡΡΠΈΠΉ IEnumerator ΠΏΡΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
public interface IDictionaryEnumerator : IEnumerator {
// ΠΠ΅ΡΠΎΠ΄Ρ IEnumeratorβ¦
DictionaryEntry Entry { get; }
object Key { get; }
object Value { get; }
}
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ IDictionaryEnumerator ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ»ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Entry, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΠΏ ΠΊΠ»Π°ΡΡΠ° System.Collections.DictionaryEntry. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΈΠΊΠ» ΠΏΠΎ ΠΏΠ°ΡΠ°ΠΌ ΠΈΠΌΠ΅Π½ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° Key/Value.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IList
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΈΠ· ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² System.Collections ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IList, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΡΠ°Π²ΠΊΠΈ, ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
public interface IList : ICollection, IEnumerable {
bool IsFixedSize { get; }
bool IsReadOnly { get; }
object this[int index] { get; set; }
int Add(object value);
void Clear();
bool Contains(object value);