ProgramlamaJunior iOS Geliştirici

Swift'te hangi koleksiyon türleri vardır, iç yapıları açısından nasıl farklılaşırlar ve ne zaman hangi koleksiyonu kullanmalıyız?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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:

Array

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.

Set

Eşsiz öğelerin (Hashable) sırasız koleksiyonu. Hash ile erişim — oldukça hızlı, tekrar eden öğelere izin verilmez.

Dictionary

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:

  • Array, indeksle erişim için etkilidir, sıralamayı destekler, ancak değerle erişim doğrusal bir süreçtir.
  • Set, elemanın varlığını kontrol etmekte hızlıdır, sadece eşsiz Hashable değerleri saklar.
  • Dictionary, anahtar (Hashable) üzerinden arama için optimize edilmiştir, sıralamayı korumaz, ancak değerleri hızlı bir şekilde arar ve değiştirir.

Kandırmaca Sorular.

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

Tipik hatalar ve anti-paternler

  • Eşsiz bir değeri aramak için Array kullanmak (Set daha iyidir)
  • Anahtar üzerinden aramaya gerek olmadığı durumlarda Dictionary kullanmak
  • Anahtar/değer olarak non-Hashable türleri kullanma girişimi

Hayattan bir örnek

Olumsuz durum

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:

  • Uygulama kolaylığı

Eksiler:

  • Arama için doğrusal karmaşıklık, tekrar eden öğelerin aşırı saklanması, büyük bellek yükü

Olumlu durum

Aynı liste Set olarak uygulanmıştır. Varlık kontrolü anında, eşsiz değerler garantilidir.

Artılar:

  • Hızlı erişim, bellek tasarrufu, tekrarları dışlama

Eksiler:

  • Öğelerin sırası garantisi yoktur