C# ში რა ტიპის კოლექციები არსებობს?
sobes.tech AI
პასუხი AI-სგან
C# გთავაზობთ მრავალი ტიპის კოლექციებს მონაცემების შენახვა და მართვისთვის, რომლებიც განლაგებულია სხვადასხვა სახელობის სივრცეებში (ძირითადად System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). მათ შეიძლება კლასიფიცირდეს რამდენიმე ძირითადი ნიშნით:
-
შენახული მონაცემების ტიპის მიხედვით:
- ტიპის გარეშე (Untyped): შენახული ობიექტები ტიპის
object(System.Collections). საჭიროებს ტიპის გადაყვანას და შეიძლება იყოს ნაკლებად ეფექტური. - ტიპიზებული (Generic): შენახული ობიექტები გარკვეული ტიპის (
System.Collections.Generic). უზრუნველყოფს ტიპის უსაფრთხოებას და უკეთეს შესრულებას.
- ტიპის გარეშე (Untyped): შენახული ობიექტები ტიპის
-
მონაცემთა სტრუქტურის მიხედვით:
- სია (Lists): მიმდევრული კოლექციები, წვდომა ელემენტებზე ინდექსით.
ArrayList(ტიპის გარეშე)List<T>(ტიპიზებული)LinkedList<T>(ტიპიზებული ორმაგი დაკავშირებული სია)
- მასივები (Arrays): ფიქსირებული ზომის, წვდომა ინდექსით.
Array(ძირითადი კლასი)T[](სინტაქსური შაქარი მასივებისთვის)
- სლოვარები (Dictionaries): წყვილები გასაღებით-ღირებულებით, წვდომა გასაღებით.
Hashtable(ტიპის გარეშე)Dictionary<TKey, TValue>(ტიპიზებული)SortedList(ტიპის გარეშე, სორტირებულია გასაღებით)SortedList<TKey, TValue>(ტიპიზებული, სორტირებულია გასაღებით)SortedDictionary<TKey, TValue>(ტიპიზებული, სორტირებულია გასაღებით, იყენებს წითელ-შავი ხე)
- მთლიანი (Sets): უნიკალური ელემენტების კოლექციები.
HashSet<T>(ტიპიზებული, არ არის სორტირებული)SortedSet<T>(ტიპიზებული, სორტირებულია)
- საკონტეინერები (Queues): კოლექციები, რომლებიც მუშაობენ FIFO პრინციპით.
Queue(ტიპის გარეშე)Queue<T>(ტიპიზებული)
- სტეკები (Stacks): კოლექციები, რომლებიც მუშაობენ LIFO პრინციპით.
Stack(ტიპის გარეშე)Stack<T>(ტიპიზებული)
- სია (Lists): მიმდევრული კოლექციები, წვდომა ელემენტებზე ინდექსით.
-
მოწოდების უსაფრთხოების მიხედვით:
- არასაფრთხო (Non-thread-safe): უმეტესობა სტანდარტული კოლექციების (
System.Collections,System.Collections.Generic). საჭიროებს გარე სინქრონიზაციას მრავალთრობით მუშაობისთვის. - მოწოდების უსაფრთხო (Concurrent): შექმნილია უსაფრთხო მუშაობისთვის მრავალთრობით გარეშე გარე ბლოკირების (
System.Collections.Concurrent).ConcurrentBag<T>ConcurrentDictionary<TKey, TValue>ConcurrentQueue<T>ConcurrentStack<T>
- არასაფრთხო (Non-thread-safe): უმეტესობა სტანდარტული კოლექციების (
-
ცვლილების შესაძლებლობის მიხედვით:
- ცვლილებადი (Mutable): უმეტესობა კოლექციების, საშუალებას აძლევს დამატებას, წაშლას და ცვლილებას.
- უცვლელი (Immutable): უზრუნველყოფს უცვლელობას შექმნის შემდეგ (
System.Collections.Immutable). ნებისმიერი ცვლილების ოპერაცია აბრუნებს ახალ კოლექციას.ImmutableArray<T>ImmutableList<T>ImmutableDictionary<TKey, TValue>ImmutableHashSet<T>ImmutableSortedSet<T>ImmutableQueue<T>ImmutableStack<T>
შერჩევა კონკრეტული კოლექციის ტიპის დამოკიდებულია ამოცანის მოთხოვნებზე: მონაცემთა ტიპი, საჭიროება წვდომის ინდექსით ან გასაღებით, უნიკალურობის მოთხოვნები, შენახვის წესები, შესრულება, მოწოდების უსაფრთხოება და ცვლილების შესაძლებლობა. თანამედროვე C#-ში ყველაზე ხშირად გამოიყენება ტიპიზებული კოლექციები System.Collections.Generic სივრციდან.