Swift Array Kullanımı

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 .

swift array

Ş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.

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 .

Bütün elemanlarımızı tek bir satır kullanarakta aşağıdaki gibi ekleyebiliriz .

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.

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.

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,

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.

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.

Ş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,

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 ?

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 ,

Ş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.

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,

İ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ı ,

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 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 ,

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.

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 İnsert Açıklama

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.

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 ,

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 ,

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 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 ,

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 ,

İş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 ,

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 .

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 .

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 ,

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 ,

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 ,

İ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.

İşlemi bize önceden dediğimiz gibi “c” karakterini döndürecektir.

İş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.

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 ,

Sayilar isminde dizimizi oluşturduk şimdide bu dizi içerisinde bulunan çift sayıları döndürecek işlemimizi yapalım ,

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 ,

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 ,

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.

 

Kaynak: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309

Taha Eren Buyruk

Başkent Üniversitesi Bilgisayar Mühendisliği.

1 Yorum

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?