0Pricing
Swift Academy · Ders

Hashable ve hash(into:)

Sözlük anahtarları ve küme üyeleri olarak kullanımı etkinleştirin.

Hashable ve hash(into:), CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

Karmalanabilir Nedir?

Hashable, Equatable üzerine kuruludur ve bir karma değeri sağlar. Bir türü Set öğesi veya Dictionary anahtarı olarak kullanmak için gereklidir.

Otomatik Karmalanabilirlik

Eşitlenebilirlikte olduğu gibi, karmalanabilir üyelere sahip yapılar ve numaralandırmalar için de bu özellik otomatik olarak oluşturulur:

struct Point: Hashable {
    let x: Int
    let y: Int
}
let set: Set<Point> = [Point(x: 0, y: 0), Point(x: 0, y: 0)]
print(set.count)  // 1  -- duplicate collapsed

Bir Türü Sözlük Anahtarı Olarak Kullanma

Karmalanabilir türler bir sözlüğün anahtarı olabilir:

struct Coord: Hashable { let r: Int; let c: Int }
var grid: [Coord: String] = [:]
grid[Coord(r: 0, c: 0)] = "start"
print(grid[Coord(r: 0, c: 0)]!)  // "start"

Karmalanabilirlik Sözleşmesi

Eşit olan (==) iki değer, MUST aynı karma değerini üretmelidir. Birini özelleştirirseniz her ikisini tutarlı tutun; aksi hâlde kümeler ve sözlükler hatalı çalışır.

Özel hash(into:) Uygulaması

hash(into:) işlevini, ilgili özellikleri karma oluşturucuya besleyerek uygulayın:

struct User: Hashable {
    let id: Int
    let name: String
    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }
    static func == (l: User, r: User) -> Bool { l.id == r.id }
}
print(Set([User(id: 1, name: "A"), User(id: 1, name: "B")]).count)  // 1

Birden Çok Alanı Birleştirme

Eşitliğe katılan her alanı besleyin:

struct Pair: Hashable {
    let a: Int
    let b: String
    func hash(into hasher: inout Hasher) {
        hasher.combine(a)
        hasher.combine(b)
    }
}
print(Pair(a: 1, b: "x").hashValue == Pair(a: 1, b: "x").hashValue)  // true

Yalnızca Kimlik Alanları Neden Kullanılmalı?

Yalnızca == içinde kullanılan alanları karmalayın. Ek (değiştirilebilir) alanları eklemek, eşitliğin aynı karma değerini gerektirmesi kuralını bozabilir:

struct Doc: Hashable {
    let id: Int       // identity
    var title: String // not part of equality
    func hash(into hasher: inout Hasher) { hasher.combine(id) }
    static func == (l: Doc, r: Doc) -> Bool { l.id == r.id }
}
print(Doc(id: 1, title: "v1") == Doc(id: 1, title: "v2"))  // true

Karmalanabilir Numaralandırmalar

Numaralandırmalar, ilişkili değerleri de karmalanabilir olduğunda, otomatik olarak karmalanabilirdir:

enum Direction: Hashable { case north, south, east, west }
let visited: Set<Direction> = [.north, .north, .east]
print(visited.count)  // 2

Set ile Yinelenenleri Kaldırma

Yaygın bir kullanım: Bir Set üzerinden geçerek yinelenenleri kaldırmak:

let nums = [1, 2, 2, 3, 3, 3]
let unique = Array(Set(nums)).sorted()
print(unique)  // [1, 2, 3]

Karma Üreticisi Her Çalıştırmada Rastgeleleştirilir

Karma değerleri her program çalıştırması için başlangıç değeriyle oluşturulur; bu nedenle hiçbir zaman bir hashValue değerini diske kaydetmeyin veya çalıştırmalar arasında tam sayısına güvenmeyin:

struct K: Hashable { let v: Int }
let h1 = K(v: 5).hashValue
// h1 is stable within this run only
print(K(v: 5) == K(v: 5))  // true  -- equality is what to rely on

Sözlükle Sayma

Karmalanabilir anahtarlar, çok yaygın bir desen olan sıklık sayılarını destekler:

let letters = ["a", "b", "a", "c", "b", "a"]
var counts: [String: Int] = [:]
for l in letters { counts[l, default: 0] += 1 }
print(counts["a"]!)  // 3

Hızlı Kontrol

hash(into:), == ile ilişkili olarak hangi kurala uymalıdır?

Özet

Karmalanabilirliği öğrendiniz:

  • Hashable, Equatable protokolünü genişletir ve Set/Dictionary anahtarları için gereklidir
  • Karmalanabilir üyelere sahip yapılar ve numaralandırmalar için otomatik olarak oluşturulur
  • Özel hash(into:) uygulamasında yalnızca == içinde kullanılan kimlik alanlarını birleştirin
  • Eşit değerler aynı şekilde karmalanmalıdır; karma değerleri her çalıştırmada rastgeleleştirilir

Sıradaki konu: Comparable ve sıralama.

Sıkça Sorulan Sorular

“Hashable ve hash(into:)” dersi ücretsiz mi?

Evet — “Hashable ve hash(into:)” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“Hashable ve hash(into:)” dersinde ne öğreneceğim?

Sözlük anahtarları ve küme üyeleri olarak kullanımı etkinleştirin. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Hashable ve hash(into:)” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Otomatik Oluşturulan Equatable
  2. Hashable ve hash(into:)
  3. Comparable ve Sıralama
  4. Özel Eşitlik Anlamı
← Swift Academy Sayfasına Dön