Merhaba arkadaşlar ,
mobilhanem.com sitemiz için anlattığımız/yayınladığımız Swift Dersleri serimize bu yazımızda Swift Dizi ile devam edeceğiz. Bir önceki yazımızda Swift Continue ve Break 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 Dizi Nedir ?
Diziler bir başka deyişle array , aynı türdeki verileri saklamaya yarayan değişkenlerimizdir. Dikkat çekmek istediğim nokta aynı türdeki verileri bir arada saklayabiliriz. Yani dizimizin içerisinde hem float hem string bir değer saklayamayız. Dizimiz tek bir tipte olmalıdır. Örneğin dizimizin bütün elemanları string olmalıdır.
Swift Array Çalışma Mantığı
Array ‘lerin içerisindeki bütün değerlerin bir indexi yani bir sırası vardır .
Şekildeki dizimizde toplam 5 adet eleman bulunmaktadır. Dizilerimizin index ‘i 0 ‘dan başlar. Toplam 5 adet elemanımız var ise bunun bir eksiği bizim maksimum index değerimizdir. Kısaca eleman sayısı – 1 = maksimum index diyebiliriz. 🙂
Dizimizin 0. index ‘inde “Herkese” elemanı vardır ve string türündedir. 1. index ‘imizde ise “Merhaba” elemanımız vardır ve o da string türündedir. Bu dizi string olmayan bir eleman barındıramaz. Elemanlarımıza erişirken index ‘lerini kullanarak erişeceğiz. Diziler ‘de değerlerimiz sıralı olarak tutulmaktadır. Peki sıralı derken neyi kastediyorum ? Dizimize ilk eklediğimiz eleman her zaman ilk eleman olarak kalacaktır. İlk eklediğimiz elemanın indeki her zaman 0 olacak ve ardından eklediğimiz değerimiz ise 1 fazlasını alarak 1 numaralı index değerine sahip olacaktır.
Swift Boş Array Tanımlama
Evet şimdi ilk olarak boş yani içerisinde hiç bir eleman olamayan bir dizi tanımlayalım.
var stringDizi: [String] = [] var intDizi = [Int]()
Yukarıdaki gibi iki farklı şekilde dizinin türünü belirtip boş bir dizi yaratabiliriz. String türündeki dizimizin adı stringDizi , integer türündeki dizimizin ismide intDizi dir. İki farklı tanımlamadan istediğinizi seçebilirsiniz.
Swift Array Eleman Ekleme
Evet yukarıda boş dizimizi yarattık fakat içinde hiç elemanımız yok . Şimdide dizimize yukarıdaki resimde bulunan elemanlarımızı ekleyelim .
stringDizi.append("Merhaba") stringDizi.append("Benim") stringDizi.append("Adım") stringDizi.append("Taha") print(stringDizi)
Bütün elemanlarımızı tek bir satır kullanarakta aşağıdaki gibi ekleyebiliriz .
stringDizi += ["Merhaba", "Benim", "Adım","Taha"]
Swift Diziyi Tek Bir Elaman İle Doldurmak
Şahsen çok olarak kullanmadığım bir özellik olsada fazla bilgi göz çıkarmaz diyerek paylaşmak istedim. Dizimizi belirlediğimiz bir eleman ile belirli bir sayı vererek istediğimiz isimde bir diziyi aşağıdaki şekilde oluşturabiliyoruz.
var selamlama = Array(repeating: "selam", count: 3)
selamlama isimli array ‘imize repeating keyword ‘ü ile eklemek istediğimiz elemanımızı yazıyoruz ardından count keyword ‘ü ile kaç adet eleman oluşturmak istiyorsak sayımızı giriyoruz ve ardından selamlama dizimiz oluşturulmuş oluyor. selamlama dizimizin içerisinde 3 adet “selam” değeri bulunmaktadır ilkinin index ‘i 0, ikincisinin 1, sonuncusunun ise 2 dir.
Swift Diziye İlk Değer Ataması Yaparak Oluşturma
Diğer değişkenlerde yaptığımız gibi dizimizi oluştururkende dizimizin içerisine eleman ekleyebiliriz. Eklediğimiz bu değerler oluşturduğumuz dizinin türünüde belirlemektedir.
var isimler: [String] = ["Taha", "Rüya","Alex","Gheorghe"]
Evet isimler adında string türünde bir dizimizin olacağını ve bu dizinin elemanlarının sırasıyla “Taha” ve “Rüya” olacağını yukarıdaki gibi ilk değer ataması yaparak belirttik. Şimdi de dizimizin türünü belirtmeden ilk değer ataması yaparak dizimizi oluşturalım,
var soyadlar = ["Buyruk","Cındık","De Souza","Hagi"]
Yukarıdaki gibide dizimizin türünü biz string olacağını belirtmedik fakat ilk değer ataması yaptığımız değerler string türünde oldukları için derleyicimiz dizimizin türünü string olarak belirledi.
Swift Dizi ‘nin Boş Olup Olmadığını Kontrol Etme
Evet elimizde bulunan bir dizinin boş olup olmadığını nasıl kontrol edebiliriz ? Cevap çok basit dizimizin ismini yazdıktan sonra isEmpty keyword ‘ü ile kontrol edebiliriz. Bu işlem bize true ya da false değerini döndürür. Peki biz bu true ve false değerlerini if yapısında koşul olarak verirsek daha güzel bir şekilde ele almış oluruz.
if isimler.isEmpty { print("isimler dizisinin içerisinde eleman yoktur") }else { print("isimler dizisinin içerisinde eleman vardır") }
isimler dizimizin boş olmadığını biliyoruz. isimler. isEmpty bize false değerini döndürür . Peki biz bunları nasıl yorumlayabiliriz ? İlk olarak sorumuzu bulalım , sorumuz (isimler.isEmpty) isimler dizimiz boş mu ? sorumuzu bulduktan sonra bize gelen cevabı yorumlayabiliriz. Cevap olarakta false gelmektedir bu kelimenin karşılığı “yanlış” olsada biz bunu “hayır değil” olarak olumsuz bir şekilde algılayabiliriz.
+ isimler dizimiz boş mu ?
– hayır.(Yani değil)
Şeklinde düşünebiliriz.
Swift Dizi ‘nin İlk Elemanına Erişme
Dizilerimizi artık kolayca oluşturabilmekteyiz. Şimdide bir adım daha giderek dizimizin ilk elemanına nasıl erişebileceğimizi öğrenelim. Bu işlem sandığınızdan çok daha basit. Yukarıda bahsettiğimiz gibi dizimizin ilk elemanının index değeri 0 dır. Bu bilgiyi kullanarak isimler dizimizin ilk elemanını bulup ekrana yazdıralım.
print(isimler[0])
Şeklinde isimler dizimizin ilk elemanına erişip ekrana bastırabilmekteyiz. Bu işlemin dışında bir başka şekildede ilk elemanına erişebilmekteyiz,
print(isimler.first)
Yukarıdaki gibide dizimizin ilk elemanına first (ilk) keyword ‘ünü kullanarak erişebilmekteyiz. Bu şekilde ilk elemana eriştiğimizde ve ekrana yazdırdığımızda “Optional(“Taha”)” şeklinde bir çıktı görmeniz lazım. Buradaki Optional yazısına şimdilik takılmayın ilerleyen derslerde bunun ne olduğunu nasıl düzeltilebileceğini detaylı olarak anlatacağım.
Swift Dizi ‘nin Son Elemanına Erişme
Dizinin son elemanına eğer index değerini biliyorsak yukarıda yaptığımız gibi isimler.[index değeri] notasyonu ile erişebiliriz. Fakat bilmiyorsak nasıl erişebiliriz ?
print(isimler.last)
first keyword ‘unusual kullandığımız gibi last (son) keyword ‘ünüde kullanarak dizimizin son elemanına erişebilmekteyiz. Derleyicimiz yine first keyword ‘ünü kullandığımızdaki gibi bize uyarı vermektedir yine bu uyarıyı görmezden gelip devam edebilirsiniz ilerleyen derslerimizde bu durumu uzun uzun anlatacağım.
Swift Dizi ‘nin Bütün Elemanlarını Yazdırma
Dizimizin bütün elemanlarını ekrana bastırmak için ,
print(isimler)
Şeklinde dizimizin içerisinde hangi elemanlarının bulunduğunu görebiliriz. Fakat elemanları bir arada göstermektedir. Elemanlarımızı ayrı ayrı görebilmemiz için for döngüsü kullanabiliriz.
for i in 0...3 { print(isimler[i]) }
Yukarıdaki gibi range olarak 0 ve 3 değerlerini verdiğimizde dizimizin bütün elemanlarını ayrı ayrı görebilmekteyiz. Biz bu range ‘i dizimizin 2 elemandan oluştuğunu bildiğimiz için verebildik eğer bilmeseydik ne yapmalıydık dediğinizi zannediyorum okumaya devam edin 🙂
Dizimizin bütün elemanlarına erişmek için aşağıdaki gibi bir for döngüsü kurabiliriz,
for deger in isimler { print(deger) }
İlk kurduğumuz for döngüsüne göre daha zahmetsiz ve daha az kod yazarak daha uygun bir şekilde elemanlarımıza eriştik. Peki nasıl yaptık ? isimler dizimizin üzerinde gezineceğimiz için in keyword ‘ünden sonra isimler yazdık ve isimler dizimizin her bir elemanına deger ismini verdik ve for döngümüz her döndüğünde deger değişkenimizi bastırdık böylece bütün elemanlarımıza erişebildik. deger değişkenimiz ilk olarak isimler dizisinin 0. index ‘inde bulunan değeri alacak ve ardından 1. index ‘teki değeri alacaktır ve isimler dizisinin bütün elemanları bitene kadar bu işlemi tekrar edecektir.
Swift Dizi ‘nin Eleman Sayısını Bulma
Her zaman dizilerimizin eleman sayısını bilmemiz neredeyse imkansızdır elbette dizimizin içindeki elemanları ve sayısını bilemediğimiz zamanlar olacaktır. Dizimizin eleman sayısını bilsek bile range olarak sabit bir sayı vermek yazdığımız kodun kalitesini düşürür . Her kod sonradan değişebileceği için elimizden geldiğince sabit sayılar vermekten uzak durmalıyız. Dizimizin içindeki eleman sayısıda haliyle yarın değişebilir.Peki bu sorunu nasıl çözebiliriz ? İşte cevabı ,
for i in 0..<isimler.count { print(isimler[i]) }
Gayet basit değil mi 🙂 count keyword ‘ünü kullanarak isimler dizimizin eleman sayısını çok rahat bir şekilde öğrenebildik. Peki neden yukarıda range olarak 0…1 verirken şimdi 0..<isimler.count dedik ?
0…1 Derken döngümüz 4 kere çalışıp 0 ve 1 değerlerini almıştı.
0..<isimler.count dememizin sebebi ise isimler.count bize isimler dizimizin eleman sayısını verecek ve bu değerde 4 olacaktır , 4 değerinin dahil olmaması içindir.
Swift Dizi ‘nin Elemanının İndex ‘ini Kullanarak Değerini Değiştirme
Dizilerimiz içerisindeki elemanların değerlerini index değerini vererek kolaylıkla değiştirebiliriz. Bu basit bir atama işlemidir.
soyadlar[1] = "Buyruk"
soyadlar dizimizin index ‘i 1 olan elemanımızın değerini “Buyruk” olarak değiştirdik. Önceki değeri “Cındık” iken bu işlemden sonraki değeri ise “Buyruk” olmuştur. Bu şekilde istediğimiz elemanın değerini kolaylıkla değiştirebiliriz.
Swift Dizi ‘nin Belirli Bir Aralığını Bulma
Dizilerimizin içerisinde belirli bir range arasındaki değerleri bulmak için range ‘imizi vererek kolaylıkla bulabiliriz ,
print(isimler[1...2])
Yukarıda yaptığımız işlemlerden tek farkı index yerine range vermemizdir. Range ‘imiz 1 ve 2 değerlerini alacaktır. Ve bu index ‘lere karşılık gelen elemanı ekrana bastıracaktır. Bu şekilde belirli bir aralıktaki değerleri bulabildiğimiz gibi bu değerleri indexleri kullanarak değerini değiştirdiğimiz şekilde istediğimiz elemanla (aynı türdeki olması şartı ile) değiştirebiliriz.
Swift Dizi ‘nin İstenilen İndex ‘ine Eleman Ekleme
Dizilere eleman eklerken her zaman sonuna eklenebilir diye bir kural yoktur istediğiniz elemanı tabi ki aynı türde olması zorunluluğu ile istediğimiz index ‘e ekleyebiliriz.
isimler.insert("Sinan", at: 0)
0. index ‘e “Sinan” değerini atadık peki diğer elemanlarımıza ne oldu ? 0. index ‘teki değerimiz hala duruyor mu ?
Aşağıdaki şekilde yapılan işlem açıkça anlatılmıştır 🙂
Swift Dizi ‘nin Belirli Bir İndex ‘inde ki Elemanı Silme
Dizimizin içerisindeki istediğimiz bir elemanı diziden çıkartmak için index değerini vererek yapabiliriz.
isimler.remove(at: 0)
Remove kelimesinin karşılıklarından biride “çıkarmak” tır. Ve remove dedikten sonra hangi index ‘teki elemanı çıkarmak / silmek istiyorsak o elemanın index değerini yazarak işlemi gerçekleştirebiliriz. Bu işlemi gerçekleştirmeden önce dizimizin içerisindeki elemanlar ,
[“Sinan”, “Taha”, “Rüya”, “Alex”, “Gheorghe”] iken bu işlemden sonra
[“Taha”, “Rüya”, “Alex”, “Gheorghe”] olacaktır. İndex olarak 0 verdiğimiz için ilk elemanı yani “Sinan” değerini çıkartacaktır.
Swift Dizi ‘nin İlk Elamanını Silme
Yukarıda anlattığım gibi index değerine 0 vererek bu işlemi gerçekleştirebiliriz. Peki neden ayrı bir başlık altında bunu yazıyorum ? Yazıyı takip etmeye devam edin sonlara doğru sebebini açıklayacağım.
İlk elemanı çıkaracağımız zaman 0 index ‘ini verebileceğimiz gibi ,
isimler.removeFirst()
removeFirst keyword ‘ünü de kullanarak ilk elemanımızı diziden çıkarabilmekteyiz.
Swift Dizi ‘nin Son Elamanını Silme
Yine dizimizin eleman sayısını biliyor isek bir eksiğini hesaplayıp remove(at:Hesaplanan Sayı) komutunu kullanarak dizimizin son elemanını dizimizden çıkartabiliriz.
Bir başka yöntem ise ,
isimler.removeLast()
removeLast keyword ‘ünü kullanarak “son elemanı çıkar” diyerekte dizimizin son elemanını çıkarabiliriz/silebiliriz.
Swift Dizi ‘nin Bütün Elemanlarını Silme
Eğer dizimizin bütün elemanlarını silmek istiyorsak basit bir atama işlemi yaparak bunu gerçekleştirebiliriz ,
isimler = []
isimler dizisini tamamen boşaltmak için boş bir dizimizi isimler dizisine eşitledik ve isimler dizimiz artık boş bir dizi oldu ve içinde hiç bir eleman kalmadı.
Bir başka şekilde ise ,
isimler.removeAll()
Bütün elemanlarımızı çıkarmak için removeAll yani “hepsini çıkar” diyerek dizimizin içerisindeki bütün elemanları çıkartabiliriz ve bu işlemden sonra dizimiz boş bir diziye dönüşecektir.
Swift Dizi ‘nin Son n Elemanını Silme
Dizimizin sondan belirli bir sayıdaki elemanını silmek için döngü kurup angarya işler yapmamıza gerek kalmayacak merak etmeyin aksine çok basit bir yöntemle sondan istediğimiz kadar elemanı çok rahatlıkla silebileceğiz ,
isimler.removeLast(2)
İşte bu kadarcık bir işlemle dizimizin son 2 elemanını dizimizden çıkarabiliyoruz. Bu işlemden sonra dizimizde bulunan en yüksek index ‘li eleman ve ondan bir önceki elemanı çıkarmış oluyoruz. Dikkat edeceğimiz bir hususta input olarak verdiğimiz sayı dizimizin maximum index değerinden büyük olamaz ve negatif bir değer olamaz bu söylediğim input olarak verdiğimiz her işlem için geçerli olacaktır.
Swift Dizi ‘nin İlk n Elemanını Silme
Artık tahmin edebiliyorsunuzdur son n elemanını silme işleminden tek farkı removeFirst keyword ‘ümüzün kullanarak gerçekleştireceğiz. Ve dizimizin ilk n elemanını dizimizden çıkaracağız ,
isimler.removeFirst(2)
Ve işlemimiz tamamlandı isimler dizimizin ilk ilki sırada bulunan değerlerimizi dizimizden çıkardık ve işlemimiz gerçekleşmiş oldu.
Swift Dizi ‘nin Belirli Bir Değere Sahip Elamanını Silme
Elimizde sadece dizimizin içerisindeki değeri biliyorsak ve o değeri dizimizden çıkarmak istiyorsak bu işlemi nasıl gerçekleştirebiliriz ? Öncelikle değerini bildiğimiz elemanın index değerini bulmamız gerekiyor ve ardından öğrendiğimiz remove(at:) ile bulduğumuz index değerini vererek dizimizden çıkarabiliriz. Mantık olarak ne yapacağımızı hangi sırada yapacağımızı kurguladıktan sonra yazmaya başlayabiliriz .
if let index = isimler.index(of: "Taha") { isimler.remove(at: index) }
Burada if let yazısına şimdilik takılmayın kısaca şöyle söyleyim , isimler dizisinde değeri “Taha” olan bir eleman var ise isimler.remove(at: index) işlemini yap , eğer yok ise hiç bir şey yapma dememizi sağlamak içindir. Sonuçta verdiğimiz değer dizimizde olmayadabilir yazdığımız uygulamanın güvenliği açısından bu tarz durumları düşünüp önlem almamız gerekmektedir.
Evet öncelikle index değişkenimizi isimler dizisininde bulunan “Taha” değerinin index’ini atadıktan sonra isimler.remove(at: index) diyerek bulduğumuz değeri yani “Taha” ‘nın index ‘ini input olarak verdik ve değeri “Taha” olan elemanı dizimizden çıkarmayı başardık 🙂
Swift Dizi İçerisindeki Maximum ve Minimum Elamanlarını Bulma
Öncelikle integer değerlere sahip bir dizi oluşturalım .
var sayilar = [0,-2,20,-22,-3,19,-58]
sayilar dizimizi oluşturduk ve biz biliyoruz ki en büyük elemanımız 20 en küçük elemanımız ise -58 . Biz bunu görebiliyoruz çünkü dizimiz çok küçük bir dizi. İleride bir uygulama yaptığımızda kullanıcılarımızın en yaşlısını veya en gencini bulmaya çalıştığımızda büyün kullanıcıların yaşlarını tek tek inceleyecek değiliz tabi ki 🙂
Bir dizi içerisindeki en büyük elemanı bulmak için yapacağımız işlem çok basit dizimizin ismini ver ardından max() keyword ‘ü ile dizimizin içerisinde ki en büyük elemanı öğrenebiliriz ,
sayilar.max()
Bu işlem bize 20 değerini döndürecektir.
En büyük elemanı bulurken yaptığımız işlemin aynısını yapacağız fakat bu sefer en büyüğünü değil en küçüğünü aradığımız için min() komutunu kullanacağız ,
sayilar.min()
Bu işlemde bize -58 değerini döndürecektir.
Peki dizimiz integer değerlerden oluştuğu gibi double , float değerlerden oluşsaydı biz yine bu komutları kullanabilecek miydik ?
Cevabım evet hatta dizimizin içerisindeki bütün elemanlarımız string olduğunda bile bu işlemi kullanabilirsiniz. Çalışma mantısı ise , string değerleri karşılaştırırken sözlük sırasına göre karşılaştırır. Sözlükte ilk önce gelen daha küçük bir değere sahip olur ve karşılaştırma buna göre devam eder. Örneğin ,
stringDizi = ["b","a","c"]
İlk başta oluşturduğumuz boş dizimize sırasıyla “b”,”a”,”c” değerlerini giriyoruz. Dizimizin en büyük elemanı en sonda yer alan eleman olacaktır ve bu da “c” karakteridir . En küçüğü ise ilk sırada yer alan yani “a” karakteri olacaktır.
stringDizi.max()
İşlemi bize önceden dediğimiz gibi “c” karakterini döndürecektir.
stringDizi.min()
İşlemi ise bize “a” karakterini verecektir. Eğer dizimizin içerisindeki elemanlar tek bir karakterden değil de bir çok karakterden oluşsaydı sıra sıra karşılaştırma yapacaktı. Yani ilk olarak, ilk karaktere sonra ikinci karaktere bakacak ve ayrılana kadar devam edecekti.
Swift İki Dizi ‘yi Birleştirme
İki dizi veya daha fazla diziyi birleştirebiliriz .Bu işlemi dizileri uç uca ekleniyormuş gibi düşünebiliriz.
var ikiDizininBirlesimi = isimler + soyadlar
Bu işlemi basit bir + operatörü ile gerçekleştirebiliriz ve artık iki dizimizin uç uca birleştirilmiş hali ikiDizininBirlesimi isimli dizimizde bulunmaktadır.
Swift Filter Fonksiyonu
filter fonksiyonu bir nevi yoklama işlemi yapar. Dizi üzerinde belirlediğiniz bir formata (duruma) uyup uymadığına bağlı olarak kontrol eder ve size dizi döndürür. Hemen bir örnek üzerinde açıklayalım ,
var Sayilar = [1,2,3,4,5,6,7,8,9]
Sayilar isminde dizimizi oluşturduk şimdide bu dizi içerisinde bulunan çift sayıları döndürecek işlemimizi yapalım ,
var ciftSayilar = Sayilar.filter{$0 % 2 == 0}
ciftSayilar isimli dizimizi oluşturduk ve içerisinde hangi elemanların olacağınıda oluştururken belirttik. Sayilar dizisinin hangi elemanlarının %2 ‘si 0 ‘a eşitse o elemanların olması gerektiğini yazdık . Burada $0 bizim dizimizin içerisindeki elemanlarımızı temsil etmektedir. Burada ki yazdığımız bu koşulu && veya || gibi başka koşullar ilede bağlayabiliriz. Yani tek bir koşul olma zorunluluğu yoktur. Şimdide 4 ‘ten büyük çift sayıları bulalım ,
var dortTenBuyukCiftSayilar = ciftSayilar.filter{$0 > 4}
Biraz önce çift sayıları bulabilmiştik şimdi tekrardan bulmak yerine hali hazırda bulunan ciftSayilar dizimizi kullanarak filter işlemimizi yaptık ve ciftSayilar.filter{$0 > 4} diyerek ciftSayilar dizisinin içerisindeki elemanlardan 4 ‘ten büyük olanlarını dortTenBuyukCiftSayilar dizisine atmış olduk . Pekiştirmek için şimdide 4 ten büyük tek sayıları bulalım ve bunu ayrı ayrı iki filter kullanarak değil iki koşulu and ile bağlayarak yapalım ,
var dortTenBuyukTekSayilar = Sayilar.filter{$0 % 2 == 1 && $0 > 4}
dortTenBuyukTekSayilar Dizimizi oluşturduk ve içerisinde olması gereken elemanları şu şekilde belirledik ,
Sayilar dizisinin elemanları içerisinden % 2 ‘si 1 ‘e eşit olan ve 4 ‘ten büyük olanlarının olmasını sağladık.
Böylelikle dortTenBuyukTekSayilar dizisinin içerisinde hem 4 ten büyük hemde tek sayılar olmuş oldu -> [5,7,9]
Önemli bir not , diziler ile işlem yaparken yaptığımız işlemde seçtiğimiz komutların hepsinin complexity ‘si yani karmaşıklığı farklıdır. Dizinin ilk elemanına erişirken, index numarasını verip erişmek ile .first ile erişmek arasında complexity olarak fark vardır. Bu farklar daha sonra sizler için çok daha önemli hale gelecektir.
Zaman ayırıp buraya kadar okuduğunuz için çok teşekkür ederim . Şu ana kadar umarım her şeyi anlamışsınızdır . Kafanıza takılan en ufak bir şeyde olsa yorum kısmından sorabilirsiniz.
print(“Happy Coding :)”)
Verdiğim örneklerin hepsini aşağıdaki bağlantıdan indirip inceleyebilirsiniz.
Swift Array
14
[…] Tümünü Göster Swift Array Kullanımı […]
[…] . Sadece kodumuzu yazıp geçelim , aşina olmayan arkadaşlar için buraya tıklayarak isEmpty ‘nin ne olduğunu nasıl kullandığımızı […]