Sobes.tech
Junior

C# ში რა ტიპის კოლექციები არსებობს?

sobes.tech AI

პასუხი AI-სგან

C# გთავაზობთ მრავალი ტიპის კოლექციებს მონაცემების შენახვა და მართვისთვის, რომლებიც განლაგებულია სხვადასხვა სახელობის სივრცეებში (ძირითადად System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). მათ შეიძლება კლასიფიცირდეს რამდენიმე ძირითადი ნიშნით:

  1. შენახული მონაცემების ტიპის მიხედვით:

    • ტიპის გარეშე (Untyped): შენახული ობიექტები ტიპის object (System.Collections). საჭიროებს ტიპის გადაყვანას და შეიძლება იყოს ნაკლებად ეფექტური.
    • ტიპიზებული (Generic): შენახული ობიექტები გარკვეული ტიპის (System.Collections.Generic). უზრუნველყოფს ტიპის უსაფრთხოებას და უკეთეს შესრულებას.
  2. მონაცემთა სტრუქტურის მიხედვით:

    • სია (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> (ტიპიზებული)
  3. მოწოდების უსაფრთხოების მიხედვით:

    • არასაფრთხო (Non-thread-safe): უმეტესობა სტანდარტული კოლექციების (System.Collections, System.Collections.Generic). საჭიროებს გარე სინქრონიზაციას მრავალთრობით მუშაობისთვის.
    • მოწოდების უსაფრთხო (Concurrent): შექმნილია უსაფრთხო მუშაობისთვის მრავალთრობით გარეშე გარე ბლოკირების (System.Collections.Concurrent).
      • ConcurrentBag<T>
      • ConcurrentDictionary<TKey, TValue>
      • ConcurrentQueue<T>
      • ConcurrentStack<T>
  4. ცვლილების შესაძლებლობის მიხედვით:

    • ცვლილებადი (Mutable): უმეტესობა კოლექციების, საშუალებას აძლევს დამატებას, წაშლას და ცვლილებას.
    • უცვლელი (Immutable): უზრუნველყოფს უცვლელობას შექმნის შემდეგ (System.Collections.Immutable). ნებისმიერი ცვლილების ოპერაცია აბრუნებს ახალ კოლექციას.
      • ImmutableArray<T>
      • ImmutableList<T>
      • ImmutableDictionary<TKey, TValue>
      • ImmutableHashSet<T>
      • ImmutableSortedSet<T>
      • ImmutableQueue<T>
      • ImmutableStack<T>

შერჩევა კონკრეტული კოლექციის ტიპის დამოკიდებულია ამოცანის მოთხოვნებზე: მონაცემთა ტიპი, საჭიროება წვდომის ინდექსით ან გასაღებით, უნიკალურობის მოთხოვნები, შენახვის წესები, შესრულება, მოწოდების უსაფრთხოება და ცვლილების შესაძლებლობა. თანამედროვე C#-ში ყველაზე ხშირად გამოიყენება ტიპიზებული კოლექციები System.Collections.Generic სივრციდან.