(Sözlük, dictionary, birleşik array, map)



Benzer belgeler
Mantıksal İşlemler. 7.1 true, false, nil

Döngüler. Tablo 15.1: Ruby de Başlıca Döngü Yapıları

Ruby. Prof.Dr.Timur Karaçay Başkent Üniversitesi

Integer Sınıfı. 9.1 Integer Sınıfına Uygulanan Başlıca Metotlar. Ruby de tamsayılar için kullanılan Fixnum ve Bignum sınıflarını üreten sınıftır.

1 RUBY HAKINDA 1 Ruby nin Gelişim Hikayesi 1 Neden Ruby? 1 Neden Bu Kadar Popüler? 2

Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end

Karmaşık Sayılar Karmaşık Sayı Yaratma

Module ve Mixin Module nedir? 17.2 Neden Module?

Sayıtlama Dizgeleri. (a n a n-1 a n1 a n0. b 1 b 2 b m )r. simgesi şu sayıyı temsil eder.

İçindekiler. Glossary

Nesne Yönelimli Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

ArrayList Uygulamaları

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Görsel Programlama DERS 04. Görsel Programlama - Ders04/ 1

Sunum İçeriği. Programlamaya Giriş

Denetim Yapıları Program Akışının Yönlendirilmesi. Şekil 11.1: Akışı Koşullu Yönlendirme

HSancak Nesne Tabanlı Programlama I Ders Notları

Java Koleksiyonları (Java Collections)

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

Operatörler. 6.1 Operatör Nedir?

ATATÜRK ÜNİVERSİTESİ BİLGISAYAR MÜHENDİSLİĞİ BÖLÜMÜ BM 104- NESNEYE YÖNELİK PROGRAMLAMA DERSİ BAHAR DÖNEMİ ÖDEV-3

Mikrobilgisayarda Aritmetik

Ruby Sınıfları. 3.1 Ruby Yorumlayıcı Bir Dildir

232 DIZIN. attr, 65 attributes, 65

T I M U R K A R A Ç AY - H AY D A R E Ş C A L C U L U S S E Ç K I N YAY I N C I L I K A N K A R A

Aşağıdaki programı inceleyip ekrana ne yazacağını söyleyebilir misiniz?

Kılgılayan Sınıflar: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap

I Java Veri Yapıları 1

C++ Dersi: Nesne Tabanlı Programlama 2. Baskı

Java Programlamada Paket Yapısı Ve Import

Ders 8: Metotlar. barisgokce.com

Class LinkedList java.lang.object java.util.abstractcollection java.util.abstractlist java.util.abstractsequentiallist java.util.

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Sözlükler. Prof.Dr. Bahadır AKTUĞ JFM212 Python ile Mühendislik Uygulamaları. *Kaynakça bölümünde verilen kaynaklardan derlenmiştir.

VERİ TABANI YÖNETİM SİSTEMLERİ I

AYRIK YAPILAR ARŞ. GÖR. SONGÜL KARAKUŞ- FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ YAZILIM MÜHENDİSLİĞİ BÖLÜMÜ, ELAZIĞ

Belirli bir iş bir çok kez tekrarlanacaksa, programda bu iş bir kez yazılır ve döngü deyimleriyle istenildiği kadar tekrar tekrar çalıştırılabilir.

EN AZ SAYIDA AĞIRLIKLA AĞIRLIKLARI TARTMAK

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

4. Bölüm Programlamaya Giriş

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

ArrayList(int initialcapacity) Sığası (capacity) parametrenin belirlediği sayıda olan bir dizi oluşturur.

T I M U R K A R A Ç AY - H AY D A R E Ş C A L C U L U S S E Ç K I N YAY I N C I L I K A N K A R A

=~ Metodu 92 Karakter Sınıfları 94 sub ve gsub metotları 101 Hızlı Tekrar 102 Kontrol Noktası 103 Düello 106 Sonraki Bölümde 109

Veritabanı. SQL (Structured Query Language)

Göstericiler (Pointers)

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

BÖLÜM 3 OPERAT A ÖRLER

Mantıksal (Logic) Operatörler

C Programlama Dilininin Basit Yapıları

2 PYTHON A GIRIŞ 13 PyCharm İle Python Projesi Oluşturma 15 Projenin Çalıştırılması 18 İlk Python Programımız 19 Açıklama Satırları 21

MATM 133 MATEMATİK LOJİK. Dr. Doç. Çarıyar Aşıralıyev

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

İlgili Konular: Object.equals(java.lang.Object), Object.hashCode(), rehash(), Collection, Map, HashMap, TreeMap, Serialized Form

ÜNİT E ÜNİTE KONTROL DEYİMLERİ KARAR YAPILARI. IF Deyimi GİRİŞ

Üst Düzey Programlama

ORACLE DA KÜRSÖRLER. Gerekli sistem değişkenleri

Manisa Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü YZM Veri Yapıları Dersi. Proje#2

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

String String İşlemleri

Bir C programı C fonksiyonlarından oluşur. Bunlar arasında main() adı verilen ana fonksiyon daima olmalıdır. C fonksiyonları programı oluşturan

Dış Kurum Entegrasyonları TURKPOS API. Yardım Dokümanı

Mikroişlemcilerde Aritmetik

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

STORED PROCEDURE LER (Saklı Yordamlar)

KAYITLAR BÖLÜM Giriş

Access e Nasıl Ulaşılır. Araç çubuklarını yeniden düzenlemek için Görünüm komutunun Araç çubukları seçeneği kullanılır.

Python Programlama Dili

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

Merge Sort Bireşen Sıralama

T I M U R K A R A Ç AY - H AY D A R E Ş C A L C U L U S S E Ç K I N YAY I N C I L I K A N K A R A

public static int Toplam int x, int y

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Ruby Nedir? 1.1 Amaçlar. 1.2 Ruby nin Yapısal Sıradüzeni

ALGORİTMA VE PROGRAMLAMA II

Yrd. Doç. Dr. Caner ÖZCAN

Program AkıĢ Kontrol Yapıları

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 1. Bölüm C# Programlamaya Giriş

Özyineleme (Recursion)

TURKCELL HİZMETLERİ. Kullanım Bilgileri. LOGO Kasım 2014

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

T I M U R K A R A Ç AY - H AY D A R E Ş C A L C U L U S S E Ç K I N YAY I N C I L I K A N K A R A

Bir dizinin boyutları sabittir ve kullanılmadan önce belirlenmelidir. Dizi boyutunu belirlemek için başka bir değişkende kullanabilirsiniz.

VERİ TABANI UYGULAMALARI

Fonksiyonlar (Altprogram)

MATEMATİK. Doç Dr Murat ODUNCUOĞLU

Sayı sistemleri-hesaplamalar. Sakarya Üniversitesi

KÜMELER VE MANTIK KESİLİ MATEMATİKSEL YAPILAR

VERİ TABANI YÖNETİM SİSTEMLERİ II. 9. FORMLAR ve ORACLE FORMS PROGRAMINDA FORM OLUŞTURMA

Ardışık Veri Tipleri. Prof.Dr. Bahadır AKTUĞ JFM212 Python ile Mühendislik Uygulamaları. *Kaynakça bölümünde verilen kaynaklardan derlenmiştir.

AKIŞ ŞEMASI AKIŞ ŞEMASI AKIŞ ŞEMASI ŞEKİLLERİ GİRİŞ

VERİTABANI. SQL (Structured Query Language)

VERİ YAPILARI. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ HASH TABLOLARI.

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 6. Yrd.Doç.Dr.Hacer Karacan

sayıların kümesi N 1 = { 2i-1: i N } ve tüm çift doğal sayıların kümesi N 2 = { 2i: i N } şeklinde gösterilebilecektir. Hiç elemanı olmayan kümeye

Transkript:

14 hash (Sözlük, dictionary, birleşik array, map) 14.1 Hash Sınıfı Array ambarı, içindekileri tamsayılarla (index) damgalayıp sıralayan harika bir yapıdır. Ama bazı durumlarda indis ya yoktur ya da kullanılması kolay olmaz. Örneğin, bir sınıfta her öğrenciyi numarası ile belirlemek mümkündür, ama pratik değildir. Onun yerine soyadlarını adlarına eşleyen bir liste daha kullanışlı olur. hash, { } parantezi içine konulan anahtar => değer ikililerinden oluşan yapısal bir tiptir; bir sınıftır. Bazı dillerde sözlük, associative memories, associative arrays, map ya da hash tables adlarıyla bilinir. Adından da anlaşılacağı üzere, hash yapısı bir sözlük yapısı gibidir. Sözlükteki terimler anahtar, açıklamaları ise değer rolünü oynar. Ancak sözlüklerde terimler (anahtarlar) alfabetik (lexicographic) sıralıdır. hash yapısında anahtarlar sıralı olmayabilir. Anahtarlar ve değerler Ruby nesneleridir. Sözlüklerde olduğu gibi, anahtarlar tekrarlamayan tiplerden olmalıdır. Değerler her tipten olabilir. Tekrarlayabilirler. Başka bir deyişle, farklı anahtarlara aynı değer eşleşebilir (bkz. [10]). Bu kitapta, hash terimi yerine, çoğunlukla sözlük terimini kullanacağız. Ancak, bir dilin anahtar sözcüklerini değiştirmenin mümkün ya da uygun olmadığı deyimler vardır. O durumlarda, Ruby nin kullandığı hash terimini kullanacağız.

174 BÖLÜM 14. HASH Arkadaşlarınızın, dostlarınızın adları karşısında telefon numaralarını yazdığınız basit bir liste, Ruby de bir sözlük yapısıdır. Ruby de hash ambarına konulan öğe çiftleri { } parantezi içine konulur. Anahtarın değere eşlendiği => simgesiyle gösterilir: anahtar=>değer. Örnek 14.1. t e l e f o n = { " Aren "=> 0597 123 1234, " Meltem "=> 01321 654 6789 } Bu yapının öğeleri anahtar=>değer çiftlerinden oluşur. Öğe sayısı istediğiniz kadar artırılabilir. Ülke adlarının karşısında telefon kodları yazılı basit bir liste, Ruby de bir sözlük yapısıdır. Örnek 14.2. u l u s l a r _ t l f = { ABD => 1, Almanya => 49, Fransa => 33, Türkiye => 90} Bu ambarda yalnızca dört tane anahtar => değer çifti vardır. Ama listeyi bütün ülkeleri içerecek kadar uzatabilirsiniz. İl adları karşısına trafik kodları yazılı basit bir liste, Ruby de bir sözlük yapısıdır. Örnek 14.3. t r a f i k = { B i t l i s => " 13 ", Van => " 65 ", D e n i z l i => " 20 ", Konya => " 42 ", Adana => " 01 " } Bu ambarda yalnızca beş tane anahtar => değer çifti vardır. Ama listeyi bütün illeri içerecek kadar uzatabilirsiniz. Unutmayınız, hash yapısında anahtarlar tekrarlamaz, ama birden çok anahtara tek bir değer karşılık gelebilir. Örneğin, bir kurumda çalışanların ofis numaralarını gösteren bir sözlük yapısında, aynı ofisi paylaşanlar için ofis numaraları aynı olacaktır. Bir kurumda çalışanların ofislerini gösteren aşağıdaki memur => ofis biçimindeki listede Melis ile Yusuf 23 numaralı ofiste oturmaktadırlar. Listede, onlar için anahtarlar farklıdır, ama eğerler aynıdır. Örnek 14.4. y e r l e ş i m = { Melis => 23, Yusuf => 23, Altan => 25 } ; Bu sözlük te ilk iki öğenin anahtarları farklı, ama değerleri aynıdır.

14.2. SÖZLÜK YAPISI ÜZERINDE İŞLEMLER 175 14.2 Sözlük Yapısı Üzerinde İşlemler Sözlük yapısı bir veri ambarıdır. Buna sözlük ambarı ya da kısaca ambar diyelim. Bu ambar üzerinde yapılacak başlıca işlemler şunlardır. Ambara sözlük öğesi; yani anahtar:değer çifti koyma Ambarda olan öğeleri görme Ambarda bir anahtarın olup olmadığını anlama Ambardaki öğeleri anahtar sırasına koyma Ambardan sözlük öğesi çıkarıp kullanma Ambardan sözlük öğesi atma (silme) 14.3 Sözlük Yaratma Bir sözlük yaratmanın farklı yöntemleri vardır. Başlıcalarını örneklerle açıklayalım. Boş sözlük Yaratma: { } parantezi boş bir sözlük yaratır. Örnek 14.5. d = {} d. length # => 0 new operatörü Hash sınıfından boş bir söz- Hash sınıfından Türetme: lük yaratır. Örnek 14.6. d = Hash. new d. length # => 0 anahtar => değer Çiftlerini Yazmak: { } parantezi içine sözlük yapısında yer alacak anahtar:değer çiftleri yazılabilir. Örneğin, bir işyerinde müdür, şef ve sekreterin ofis numaralarını gösteren Örnek 14.7.

176 BÖLÜM 14. HASH o f i s = { "müdür" => 310, " ş e f " => 311, " s e k r e t e r 1 " => 312, " s e k r e t e r 2 " => 312} listesi bir sözlük yapısıdır. Bu yapıda anahtarlar tektir. Ama sekreter1 ve sekterer2 için ortak bir ofis ayrılmıştır. Bu demektir ki, sözlük yapısında anahtarlar tek olur, tekrarlamazlar, ama değerler tek olmayabilir. 14.3.1 Array ile Hash Yapılarının Karşılaştırılması Sözlük yapısı, array yapısı gibidir. Array yapısında her öğenin bir tamsayı indisi vardır. array in öğelerine indisleriyle erişilir. Array in öğeleri indislerine göre sıralıdır. Sözlük yapısında ise öğelerin indisleri yoktur. Onun yerine anahtarlar vardır. Anahtarlar indis rolünü oynarlar. Sözlük içindeki her öğe bir anahtar => değer çiftidir. Sözlükte öğe çiftlerine anahtar ile erişilir. Ama sözlük yapısı anahtarlara göre sıralı olmayabilir. Sözlük, Hash sınıfından ::new metodu ile yaratılır. Ör- Sözlük Yaratma neğin, puan = Hash. new deyimi puan adlı bir sözlük ambarı yaratır. 14.4 Hash Ambarına Öğe Koyma puan [ " Altan " ] = 75 deyimi puan adlı hash ambarına "Altan" => 75 çiftini bir öğe olarak koyar. Burada "Altan" anahtar, 75 ona karşılık getirilen değerdir. Bir hash ambarına istenildiği kadar öğe konulabilir. Ama anahtar tekrar edemez. Var olan bir anahtar tekrar kullanılırsa, ona önceden verilen değer silinir, yeni değeri eskisinin yerine geçer. Sözlük ambarı yaratılırken içine öğeler koymak mümkündür: kent = { Ankara => 312, İ s t a n b u l => 212, İzmir => 232} deyimi kent adlı bir sözlük ambarı yaratır ve içine üç kentin adlarını telefon kodlarına eşleyen üç öğe koyar. Daha sonra bu ambara yeni ekler yapılabilir: kent [ Antalya ] = 242 Anahtardan sonra gelen ok (=>) simgesi, anahtarı değere eşler. O nedenle, bazı kaynaklarda hash yapısına eşlem (map) denilir.

14.5. SÖZLÜK YAPISININ METOTLARI 177 Hash ambarında olmayan bir öğeye erişilmek istenildiğinde nil öntanımlı değeri gelir. Ama istersek bunu değiştirip, istediğimiz bir nesneyi öntanımlı yapabiliriz. Örneğin, hafta = Hash. new( " İ y i günler " ) deyimi hafta adlı hash ambarı için "İyi günler" nesnesini öntanımlı yapar. Öğesi olmayan sözlük ambarına erişim istendiğinde nil yerine, tanımlanan bu değer gelir. O nedenle, tanımlanan bu değere sözlük ambarının öntanımlı değeri diyeceğiz. Başka öntanımlı değer tanımlanmamışsa, boş sözlük ambarına erişim istendiğinde nil gelir. nil sözlük ambarının boş olduğu anlamına gelir. Örneğin, h = Hash. new h. d e f a u l t # => n i l olur. Ama, new operatöründe argüman kullanılırsa, aşağıdaki gibi olur: h = Hash. new (0) h. d e f a u l t # => 0 Ruby sözlük yapısında anahtar => değer çiftlerini oluşturan anahtarlar ve değerler her tipten olabilirler. Onlar birer nesnedir. Tek koşul, ambarda anahtar ın tekrarlamamasıdır. Aynı nesne iki kez anahtar olarak kullanılamaz. Oysa, değer nesnesi birden çok kez yer alabilir. 14.5 Sözlük Yapısının Metotları Hash sınıfının çok sayıda metodu vardır. Onların listesini görmek için, Ruby nin genel kuralını uygulayabiliriz. Bilindiği gibi, nesne.methods deyimi, sökonusu nesneye uygulanabilen bütün metotları listeler. Hash sınıfına uygulanabilen bütün metotları görmek için Hash. methods deyimi yeterlidir. Bu deyim uzun bir liste verir. Burada Hash sınıfının çok kullanılan bazı metotlarını örneklerle açıklayacağız. Örnek 14.8. d = { " Ankara " => 213, " izmir " => liman, " Elma " => f a l s e } e = { ab => 12, cd => " kent ", e f => t r u e } deyimleri d ve e adlarında iki sözlük ambarı yaratır ve { } içine, istenen öğeleri koyar. Uyarı 14.1. Nesne tabanlı programlama dillerinin çoğunda, her sınıfın metotları vardır. Bir sınıftan başka bir sınıftaki metot çağrılabilir. Ancak,

178 BÖLÜM 14. HASH Ruby de durum farklıdır. Ruby de metotlar modüllerde toplanır. Kernel adlı modülde toplanan metotlar, hemen her sınıfa uygulanabilir. Kernel Module den üretilmiştir. Kernel in metotları Ruby nesnelerinin orta malı gibidir. Şimdi amradaki öğelerin bileşenlerine nasıl erişileceğini görelim: 14.5.1 Anahtarlara Erişim keys metodu sözlükteki anahtarlara erişir: Örnek 14.9. d. keys # => [ " Ankara ", " izmir ", " Elma " ] p(d. keys ) # =>["Ankara ", " izmir ", " Elma " ] Burada p() metodu print() metodunun kısa adıdır. Parametresini (argument) yazar. 14.5.2 Değerlere Erişim values metodu sözlükteki değerlere erişir: Örnek 14.10. d. values # => [ 2 1 3, " liman ", f a l s e ] p(d. values ) # => [ 2 1 3, " liman ", f a l s e ] 14.5.3 Kümesel İşlemler Sözlük ambarının anahtarları ve değerleri birer array olarak elde edilebildiğine göre, arrayler üzerinde yapılan kümesel arakesit (&), bileşim (+) ve fark (-) işlemleri uygulanabilir. Örnek 14.11. d. keys & e. keys d. keys + e. keys 3 d. keys e. keys Bu kodları etkileşimli (irb) kipinde tek tek yazmak yerine hepsini bir program haline de getirebiliriz: Örnek 14.12.

14.5. SÖZLÜK YAPISININ METOTLARI 179 2 # encoding utf 8 d = { " ankara " => kent, " izmir " => liman, " kars " => hudut } e = { ab => 12, " cd " => liman, izmir => 232 } d. keys 7 p(d. keys ) # => [ " ankara ", " izmir ", " kars " ] d. values p(d. values ) # => [ " kent ", " liman ", " hudut " ] 12 e. keys p( e. keys ) # => [ " ab ", " cd ", " izmir " ] 17 e. values p( e. values ) # => [ 1 2, " liman ", 232] d. keys & e. keys # => anahtarlar i ç i n mantıksal AND p(d. keys & e. keys ) # => [ " izmir " ] 22 d. keys + e. keys # => a n a h t a r l a r ı n kümesel b i l e ş i m i p(d. keys + e. keys ) # => [ " ankara ", " izmir ", " kars ", " ab ", " cd ", " izmir " ] d. keys e. keys # => a n a h t a r l a r ı n kümesel f a r k ı p(d. keys e. keys ) # => [ " ankara ", " kars " ] / ruby hash01. rb [ " ankara ", " izmir ", " kars " ] 4 [ " kent ", " liman ", " hudut " ] [ " ab ", " cd ", " izmir " ] [ 1 2, " liman ", 232] [ " izmir " ] [ " ankara ", " izmir ", " kars ", " ab ", " cd ", " izmir " ] 9 [ " ankara ", " kars " ] / Her bir kodun karşısında verdiği sonuç yazılı olduğu için, başka açıklamaya gerek yoktur. d = { " ankara " => kent, " izmir " => liman, " kars " => hudut } hash ambarı verilmiş olsun. Aşağıdaki metotlar, karşılarında belirtilen eylemleri yaparlar d.methods : d nesnesine uygulanabilecek metotları listeler. d.length : d ambarındaki öğe sayısını verir. d. length # => 3 a.inspect : a ambarın içini gösterir. to_s gibidir.

180 BÖLÜM 14. HASH d. i n s p e c t => " {\" ankara\"=>\" kent \", \" izmir \"=>\"liman \", \" kars \"=>\" hudut \"} " to_s : inspect metodunun yaptığı işi yapar. d. to_s => " {\" ankara\"=>\" kent \", \" izmir \"=>\"liman \", \" kars \"=>\" hudut \"} " d.class: d nesnesinin hangi sınıftan türetildiğini belirtir. d. c l a s s # => Hash d.clear : d ambarındaki bütün öğeleri siler; boş ambar yapar. d. c l e a r \{ \} d. length # => 0 d.keys : d ambarının anahtarlarını bir array biçiminde verir. d. keys # => [ " ankara ", " izmir ", " kars " ] d.values : d ambarının değerlerini bir array biçiminde verir. d. values # => [ " kent ", " liman ", " hudut " ] d.get(key) Argüman olarak yazılan değere eşleşen anahtarı verir. Eşleşen değer yoksa hiç (nil) verir. d. key ( kent ) # => " ankara " d. key (7) # => n i l hsh[key > vlue] Verilen anahtara karşılık gelen değeri verir. h [ " a " ] #=> 100 3 h [ " c " ] #=> n i l == İki hash ambarının eşit olup olmadığını denetler. h1 = { " a " => 1, " c " => 2 } 2 h2 = { 7 => 35, " c " => 2, " a " => 1 } h3 = { " a " => 1, " c " => 2, 7 => 35 } h4 = { " a " => 1, " d " => 2, " f " => 35 } h1 == h2 #=> f a l s e h2 == h3 #=> true 7 h3 == h4 #=> f a l s e hsh[key > value] Verilen anahtara karşılık gelen değeri verir.

14.5. SÖZLÜK YAPISININ METOTLARI 181 h [ " a " ] #=> 100 3 h [ " c " ] #=> n i l delete(anahtar) > vlue Verilen anahtara karşılık gelen değeri verir. 2 h. d e l e t e ( " a " ) #=> 100 h. d e l e t e ( " z " ) #=> n i l h. d e l e t e ( " z " ) { e l "#{e l } not found " } #=> " z not found " delete_if{ key,value block} : bloktakine eşleşen bütün anahtar-değer çiftlerini siler. 1 h = { " a " => 100, " b " => 200, " c " => 300 } h. d e l e t e _ i f { key, value key >= " b" } #=> {" a"=>100} each : bloktakine eşleşen bütün anahtar-değer çiftlerini verir. h. each { key, value puts "#{key} i s #{value } " } 3 a i s 100 b i s 200 each_key{ anahtar blok} : Bloktakine eşleşen bütün anahtarı verir. 1 h. each_key { key puts key } a b each_value{ value blok} : Bloktakine eşleşen bütün anahtarı verir. 1 h. each_value { value puts value } 100 200 empty? : Ambar boş ise true verir. 1 {}. empty? #=> true fetch(anahtar) : Anahtara karşılık gelen değeri verir h. f e t c h ( " a " ) #=> 100 h. f e t c h ( " z ", " go f i s h " ) #=> " go f i s h " has_key?(anahtar) : Verilen anahtar ambarda ise true verir. 2 h. has_key?( " a " ) #=> true h. has_key?( " z " ) #=> f a l s e

182 BÖLÜM 14. HASH include?(anahtar) : Verilen anahtar ambarda ise true verir. has_key metoduna denktir 2 h. i n c l u d e?( " a " ) #=> true h. i n c l u d e?( " z " ) #=> f a l s e has_value?(değer) : Verilen değer ambarda ise true verir. 2 h. has_value?(100) #=> true h. has_value?(999) #=> f a l s e invert : Bir bölükte anahtarları değer,değerleri anahtar yaparak yeni bir sözlük yaratır. h = { " n " => 100, "m" => 100, " y " => 300, " d" => 200, " a " => 0 } 2 h. i n v e r t #=> {0=>"a ", 100=>"m", 200=>"d ", 300=>"y "} keys : Bir sölükte anahtarlardan oluşan bir array yaratır. h = { " a " => 100, " b " => 200, " c " => 300, " d" => 400 } h. keys #=> [ " a ", " b ", " c ", " d " ]