Swift'te üç ana standart koleksiyon vardır: Array, Set ve Dictionary. Her biri farklı arayüzler sunar, iç yapısında farklılık gösterir ve farklı görevler için tasarlanmıştır.
Soru Tarihi:
Swift'te koleksiyonlar, tür güvenliği (type safety) ve performansa odaklanarak tasarlanmıştır, value semantics ve Copy-on-Write prensibine dayanan kopyalama mekanizmasını içermektedir.
Sorun:
Genellikle acemi geliştiriciler, Set veya Dictionary kullanılması gereken durumlarda yalnızca Array kullanır, bu da bellek israfına ve erişim/arama hızının düşmesine neden olur. Farklılıkları anlamak önemlidir.
Çözüm:
Sıralı bir eleman koleksiyonu, indeksle erişim sağlanır, tekrarlayan elemanlara izin verilir. Genellikle dinamik bir tampon aracılığıyla gerçekleştirilir.
Eşsiz öğelerin (Hashable) sırasız koleksiyonu. Hash ile erişim — oldukça hızlı, tekrar eden öğelere izin verilmez.
Anahtar-değer çiftleri koleksiyonu. Anahtar Hashable olmalıdır. Anahtar ile (hash tablosu aracılığıyla) değere erişim sağlar.
Kod örneği:
var arr: [Int] = [1, 2, 3, 4] var set: Set<Int> = [1, 2, 2, 3] var dict: [String: Int] = ["a": 1, "b": 2] // set == [1, 2, 3] — tekrar eden elemanlar atılır
Anahtar özellikler:
Set veya Dictionary öğeleri olarak non-Hashable türleri kullanabilir miyiz?
Hayır. Set/Dictionary içinde saklanmak için öğe Hashable olmalıdır (benzersiz bir hash tanımlayıcısına sahip olmalıdır). Aksi takdirde derleyici koleksiyonu oluşturmanıza izin vermez.
struct Point {} // Set<Point> hata verecektir, çünkü Point Hashable değildir
Set'teki öğelerin saklama sırası eklenme sırasıyla aynı mıdır?
Hayır. Set, sırayı garanti etmez — yineleme herhangi bir sırayı verebilir. Eğer sıraya ihtiyaç duyuyorsanız, Array kullanmalısınız.
Dictionary'de var olmayan bir anahtara erişmeye çalıştığımızda ne olur?
Dictionary Optional döndürür. Dikkatli olun — var olmayan bir anahtar için erişim denemesi nil döndürür, hata değil.
let val = dict["not exist"] // val — nil
Geliştirici, benzersiz kullanıcı listesini oluşturmak için Array kullanır ve benzersizliği contains ile kontrol eder. Büyük listelerde — kontrol için çok zaman harcar.
Artılar:
Eksiler:
Aynı liste Set olarak uygulanmıştır. Varlık kontrolü anında, eşsiz değerler garantilidir.
Artılar:
Eksiler: