ProgramlamaiOS geliştirici

Swift'teki Set veri tipi hakkında bilgi verin: özellikleri, arayüzleri, işlem süreleri ve kullanım sırasında potansiyel tuzaklar, Array'den (Dizi) farkları.

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

Cevap

Set, benzersiz elemanların sırasız bir koleksiyonudur ve hash tablosu olarak uygulanmıştır. Array'den en önemli farkı, tekrar eden değerlerin olmaması ve sıralamanın olmamasıdır. Temel arayüzler: ekleme yöntemleri (insert), silme (remove), varlık kontrolü (contains).

İşlem Süresi:

  • insert, remove ve contains işlemleri ortalama O(1) sürede çalışır.
  • Tüm elemanların üzerinde döngü - O(n).

Kullanım örneği:

var numbers: Set<Int> = [1, 2, 3] numbers.insert(4) // Set: 1, 2, 3, 4 numbers.insert(2) // Set değişmeyecek, 2 zaten mevcut numbers.remove(1) // Set: 2, 3, 4 print(numbers.contains(3)) // true

Set'i, benzersizliğin önemli olduğu ancak sıralamanın önemli olmadığı durumlarda kullanın. Array ile karşılaştırın:

  • Array'de bir eleman silme ve arama O(n) sürede gerçekleşir.
  • Array'de aynı değerlerin bulunmasına izin verilir.

Set, ∪, ∩, −, ⊆, ⊇ gibi diğer küme teorisi işlemlerini destekler.

Kandırmacalı Soru

Soru:

Aşağıdaki kod derlenecek mi ve neden?

let set: Set = [[1, 2], [3, 4]]

Cevap: Hayır, derlenmeyecek. Set, elemanların türünün Hashable protokolüne uymasını gerektirir. Dizi (Array), Hashable'ı uygulamadığı için dizi kümeleri doğrudan oluşturulamaz. Örneğin, Set<Int> doğrudur, ancak Set<[Int]> değildir.

Konuyla ilgili ince detayları bilmemekten kaynaklanan gerçek hata örnekleri


Hikaye

Bir hizmette, geliştiriciler nesnelerin benzersiz tanıtıcılarını [Int] olarak saklıyorlardı, Set<Int> olarak değil. Bu, varlık kontrollerinin ve silme işlemlerinin yavaş çalışmasına (süre - O(n)) neden oldu, tekrar eden değerler ortaya çıktı ve iş mantığı bozuldu.


Hikaye

Set'e standart dışı türler (örneğin, Set<MyModel> oluşturmak) konulmaya çalışıldı, ancak tür Hashable'ı uygulamıyordu. Kod, uygun protokoller eklenince derlendi, ancak hash(into:)'deki hatalar çakışmalara ve çalışma sırasında öngörülemeyen davranışlara neden oldu.


Hikaye

Bir geliştirici, Set içindeki elemanların sıralanma sıranın ekleme sırasıyla aynı olacağını bekliyordu ve UI'yi bu sıraya göre inşa etti. Sonuçta, her çalıştırmada sıralama farklıydı, bu da son kullanıcının verilerin tutarsız görüntülenmesine neden oldu.