Swift Sets (Konu Anlatımı Ve Örnek Kodlar İle) || Mobilhanem

Swift Sets (Konu Anlatımı Ve Örnek Kodlar İle) || Mobilhanem

Merhaba arkadaşlar ,
mobilhanem.com sitemiz için anlattığımız/yayınladığımız Swift Dersleri serimize bu yazımızda Swift Sets ile devam edeceğiz. Bir önceki yazımızda Swift Dizi konusundan bahsetmiştik. Bu derse başlamadan önce xcode’u kurmak ve playground  üzerinde swift kodu yazabilmek için bu dersimizi okumanızı tavsiye ederim.

Swift Sets Nedir ?

Öncelikle Sets collection tiplerimizden biridir. Tıpkı array ‘ler gibi. Sets aynı türdeki verileri saklamaya yarar. Diziler ile çok benzerlerdir.

Swift Sets ile Array Farkı

Sets ile Array ‘lerin çok benzer olduğunu söyledik. Ayrıldıkları en önemli noktalardan biri array ‘lerde aynı değer array ‘in içerisinde yer alabiliyorken bu durum Sets için geçerli değildir. Yani Sets içerisinde aynı değeri bulundurmaz. İçerisindeki bütün değerler birbirlerinden farklı olmak zorundadır. Bir başka ayırt edici özellik ise array ‘ler sıralı iken Sets ‘te böyle bir durum söz konusu değildir. Tabi ki kendimiz sıralayabiliriz 🙂

Swift Sets Çalışma Mantığı

Sets yapılarında array ‘lerdeki gibi bir sıralı olma durumunun olmadığını söylemiştim. Şimdi de Array ‘lerini çalıma mantığını anlatırken verdiğimiz örneğin aynısının Sets yapısında nasıl gözüktüğüne bir göz atalım.

swift_sets

Resimde de görüldüğü gibi string türünde değerlerimiz sıralı olmayan bir şekildedir. Ve tıpa tıp aynı değerden bulunmamaktadır. Bu değerleri bir komutla alfabetik olarak sıralı hale getirebiliriz.

Swift Boş Sets Oluşturma

Vazgeçilmez bir başlangıç olarak boş bir Sets türünde değişkenimizi yaratabiliriz artık ,

var selamlama = Set()

var selamlama = Set<String>()

Ve tanımladık gayet kolay ve kısa bir biçimde 🙂 Burada selamlama değişkenimiz Set türünde ve içerisinde string değerler barınacaktır diye belirtmiş olduk. Peki türünü belirtmeden ilk değer ataması (Array konusunda yaptuğımız gibi) yapabilir miyiz ?

var selamAlma : Set = [“Aleykum Selam”]

var selamAlma : Set = [“Aleykum Selam”]

Türünü belirtmeden selamAlma değişkenimizin Set türünde olacağını ve içerisinde “Aleykum Selam” (String türünde) değerinin olacağını belirttik ve derleyicimiz atadığımız bu değerin string olduğunu algılayıp selamAlma değişkenimizin string değerler barındıracağını anlamış oldu. Bu aşamadan sonra selamAlma değişkenimizin içerisine string olmayan bir değer atayamayız. Aynı işlemi türümüzü belirterek yapmakta mümkündür ve belirtmek daha iyi olabilir.

var selamAlma : Set = [“Aleykum Selam”]

var selamAlma : Set<String> = [“Aleykum Selam”]

Ve aynı işlemi türümüzü belirterek yaptık.

Swift Sets ‘e Değer Ekleme

Array ‘de kullandımığımız append komutunu burada kullanamamaktayız fakat hemen hemen aynı karşılığa gelen insert komutumuz bulunmaktadır. Bu komut set değişkenimize kolaylıkla yeni bir değer ekleyebiliriz.

selamlama.insert(“Selam”)
selamlama.insert(“Nasılsınız ?”)

selamlama.insert(“Selam”)

selamlama.insert(“Nasılsınız ?”)

selamlama değişkenimizin içerisinde artık string türünde bir değerimiz var.

Swift Sets Eleman Silme

insert komutu ile ekleme yapabildiğimiz gibi remove komutu ilede istediğimiz değeri silebilmekteyiz.

selamlama.remove(“Nasılsınız ?”)

selamlama.remove(“Nasılsınız ?”)

selamlama değişkenimizin içerisindeki “Nasılsınız ?”  değerini böylelikle çıkarmış olduk. Bu şekilde yaptığımızda eğer input olarak verdiğimiz değer yoksa nil değeri döner ve bu koşulu if yapısında kullanmışsanız derleyicimiz hata verir. Bu sorunu gidermek için ileride Optionals konusunu anlatacağım orada bu sorunu nasıl giderebileceğimizi öğrenebileceksiniz.

Swift Sets Değer Kontrolü -Array İçinde Geçerli-

Sets türündeki bir değişkenimizin içerisinde herhangi bir değer araması yapabiliriz.  contains komutu ile sets türündeki ve array türündeki değişkenlerimizin içerisinde belirli bir değeri arayabiliriz.

selamlama.contains(“Selam”)

selamlama.contains(“Selam”)

İşlemi bize true ya da false değerlerini döndürür. Gözümüze daha hoş gelebilmesi için if yapısı kullanarak yapalım .

if selamlama.contains(“Selam”){
print(“selamlama ‘nın içerisinde Selam vardır”)
} else {
print(“selamlama ‘nın içeriisnde Selam Yoktur”)
}

if selamlama.contains(“Selam”){

    print(“selamlama ‘nın içerisinde Selam vardır”)

} else {

    print(“selamlama ‘nın içeriisnde Selam Yoktur”)

}

Yukarıdaki kod bloğu selamlama ‘nın içerisinde “Selam” değerinin geçip geçmediğini kontrol eden bir yapıdır. Eğer geçiyorsa yani selamlama.contains(“Selam”) sonucu true ise ekrana “selamlama ‘nın içerisinde Selam vardır” yazısını bastıracaktır . Eğer geçmiyor ise ekrana “selamlama ‘nın içeriisnde Selam Yoktur” yazısını bastıracaktır. insert komutu ile “Selam” değerimizi önceden eklediğimiz için true değeri döner ve if bloğumuzun içerisine girer.

Swift Sets Boş mu ? Dolu mu ?

Tıpkı array ‘lerde yaptığımız gibi .isEmpty komutu ile set değişkenimizin içerisinde eleman bulunup bulunmadığını kontrol edebiliriz hemen küçük bir örnek yapalım ,

if selamlama.isEmpty {
print(“selamlama boştur”)
}else {
print(“selamlama doludur”)
}

if selamlama.isEmpty {

    print(“selamlama boştur”)

}else {

    print(“selamlama doludur”)

}

Burada isEmpty komutunun çalışma mantığını anlatmayacağım.

var arrayKonusunuOkuma = false

if arrayKonusunuOkuma {
print(“Sorun yok :)”)
}else {
print(“Bu Adresten Okuyabilirsiniz -> https://www.mobilhanem.com/swift-array-kullanimi/”)
}

var arrayKonusunuOkuma = false

 

if arrayKonusunuOkuma {

    print(“Sorun yok :)”)

}else {

    print(“Bu Adresten Okuyabilirsiniz -> https://www.mobilhanem.com/swift-array-kullanimi/”)

}

Swift Sets Bütün Elemanları Ekrana Yazdırma

Array ‘lerde bütün elemanları ekrana bastırmak için yaptığımız işlemin aynısını yapacağız.

for kelimeler in selamlama {
print(“(kelimeler)”)
}

for kelimeler in selamlama {

    print((kelimeler))

}

Şeklinde selamlama değişkenimizin içerisindeki değerlerimizi tek tek ekrana bastırabilmekteyiz.

Swift Sets Eleman Sayısını Bulma

Sık sık dediğim gibi yine söylemek durumundayım array ‘lerde yaptığımız işlemin tıpa tıp aynısını yapacağız ve yine count komutunu kullanacağız .

Değişkenimizin ismini yazdıktan sonra .count diyerek değişkenimizin içerisinde bulunan elemanların sayısını görebilmekteyiz.

Swift Sets Sıralama

Önceden söylediğim gibi sets içinde sıralama yapmaz yeni bir eleman eklendiğinde ya da silindiğinde tekrar tekrar sıralama yapmaz. Belirli bir sıralama algoritması yoktur. Fakat biz sorted komutu ile alfabetik olarak sıralayabiliriz.

for kelimeler in selamlama.sorted() {
print(kelimeler)
}

for kelimeler in selamlama.sorted() {

    print(kelimeler)

}

Şeklinde kullanarak selamlama değişkenimizin içerisindeki kelimelerimizi alfabetik olarak sıraladık ve sıraladığımız şekliyle ekrana bastırdık. Çıktıda ilk görmemiz gereken değer “Nasılsınız ?” ve ardından “Selam” ‘ı görmemiz gerekmektedir. Çünkü alfabetik olarak sıralama yaparken harflerden önce gelen daha küçük olduğu için ilk olarak o değeri göstermektedir. “N” karakterinin ASCII karşılığı decimal olarak 78 iken “S” karakterinin ise 83 ‘tür.

Swift Sets Temel İşlemler

Temel işlemlerden kastım , iki set değişkeninin kesişimini (intersection) , simetrik farkını (symmetricDifference) , birleşimini (union) ve  bir değişkenin diğer değişkenden farkını (subtracting) bulma işlemleridir. Öncelikle bu işlemler tam olarak ne anlama gelir onu anlamamız lazım . Aşşağıda ki görselide tam olarak bunun için hazırladım 🙂  Başlamadan önce , aşağıda geçen a ve b ifadeleri iki farklı set türünde değişkenleri ifade etmektedir.

Sets Temel İşlemler

Evet temel operatörleri öğrendiğimize göre bu işlemleri kullanmaya başlayabiliriz.

Öncelikle kullanacağımız değişkenlerimizi tanımlamakla başlayalım,

let tekSayilar: Set = [1, 3, 5, 7, 9]
let ciftSayilar: Set = [0, 2, 4, 6, 8]

let tekSayilar: Set = [1, 3, 5, 7, 9]

let ciftSayilar: Set = [0, 2, 4, 6, 8]

Değişkenlerimizi tanımladıktan sonra ilk olarak intersection işlemini yapalım ,

print(tekSayilar.intersection(ciftSayilar))

print(tekSayilar.intersection(ciftSayilar))

Evet intersection işlemimizi doğru yaptık fakat her hangi bir çıktı göremedik merak etmeyin bu çok doğal çünkü intersection işlemi iki kümenin kesişimini bulduğu için tek sayılar ile çift sayılar kümesinin kesişimide olmadığı için bu sonuç gayet doğaldır.

Şimdide symmetric difference işlemini yapalım ve sonucumuzu görelim ,

print(tekSayilar.symmetricDifference(ciftSayilar).sorted())

print(tekSayilar.symmetricDifference(ciftSayilar).sorted())

Çıktı olarak tekSayilar ile ciftSayilar değişkenlerimizin birleşimini gördük. Çünkü symmetric difference işlemi iki kümenin birbirinden farkını alıp birleştirir. Bizim bu iki kümemizin kesişimi olmadığından farklarının birleşimi direkt birbirlerine eşit olacaktır. Bu durum için union işlemide aynı sonucu verecektir.

Evet geldik subtracting işlemine , bu herkesin vakti zamanında , zamanını bolca geçirdiği ve hala lise 3 ‘ e geldik yinemi kümeler ?? dediğimiz kümelerdeki fark işlemidir 🙂

print(tekSayilar.subtracting(ciftSayilar))

print(tekSayilar.subtracting(ciftSayilar))

Ve bu işlemde bize tekSayilar kümesinin kendisini verecektir.

Swift Set Membership and Equality

Burada kullanacağımız komutlar ve acıklamaları şu şekilde olacaktır ,

+ isSubset

-Bir kümedeki bütün değerlerin bir başka kümede olup olmağını belirlemek için kullanılır.

+isSuperset

-Bir kümenin diğer kümeyi kapsayıp kapsamadığını belirlemek için kullanılır.

+isDisjoint

-İki kümenin ortak değerlere sahip olup olmadığını belirleme yöntemi

 

Şimdide bu işlemleri kullanabileceğimiz değişkenlerimizi tanımlayalım ,

let evHayvanlari: Set = [“?”, “?”]
let ciftlikHayvanlari: Set = [“?”, “?”, “?”, “?”, “?”]
let baskaHayvanlar: Set = [“?”, “?”]

let evHayvanlari: Set = [“?”, “?”]

let ciftlikHayvanlari: Set = [“?”, “?”, “?”, “?”, “?”]

let baskaHayvanlar: Set = [“?”, “?”]

Değişkenlerimizi tanımladıktan sonra isSubset komutumuzu kullanalım ,

evHayvanlari.isSubset(of: ciftlikHayvanlari)

evHayvanlari.isSubset(of: ciftlikHayvanlari)

Derleyicimize kısaca evHayvanlari , ciftlikHayvanlari ‘nın bir alt kümesi midir ? diye sormuş olduk ve derleyicimizde evet cevabını verdi .

Şimdi ise isSuperset komutumuzu kullanalım ,

ciftlikHayvanlari.isSuperset(of: evHayvanlari)

ciftlikHayvanlari.isSuperset(of: evHayvanlari)

Şimdi ise derleyicimize ciftlikHayvanlarievHayvanlari ‘nı kapsar mı ? diye sorduk ve derleyicimizde doğal olarak true cevabını döndürdü .

Sırada ki komutumuz ise isDisjoint ,

ciftlikHayvanlari.isDisjoint(with: baskaHayvanlar)

ciftlikHayvanlari.isDisjoint(with: baskaHayvanlar)

Derleyicimize ciftlikHayvanlari ve baskaHayvanlar değişkenleri ayrık mı ?  diye sorduk . Ve cevap olarak true cevabı döndü. Yani bu iki değişkenin ortak tek bir elemanı bile yokmuş.

 

Takıldığınız veya sormak istediğiniz soruları yorum kısmından belirtebilirsiniz.

Print(“Don’t be shy :)”)

 

9

Yorum Yap
0 Yorum yapan