01 Jul 2013

Diziler, tam sayı indexli bir şekilde farklı nesnelerin tutulabileceği bir veri yapısıdır. C, Java vb. dillerde olduğu gibi dizi indexi 0‘dan başlar. -1 son elemanı temsil eder.

Boş bir dizi oluşturma

arr = Array.new
=> []

arr = []
=> []

Dizi oluşturma

ary = [1, "two", 3.0]
=> [1, "two", 3.0]

Array.new(3)
=> [nil, nil, nil]

Array.new(3, true)
=> [true, true, true]

Array.new(4) { Hash.new }
=> [{}, {}, {}, {}]

empty_table = Array.new(3) { Array.new(3) }
=> [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]

arr = %w[a b c]
=> ["a", "b", "c"]

Dizideki elemanlar

arr = [1, 2, 3, 4, 5, 6]

arr[2]
=> 3

arr[-1]
=> 6

arr[-3, 2]
=> 4, 5

arr[1...4]
=> 2, 3, 4

arr.at(0)
=> 1

Dizi hakkında bilgi edinme

Boyutu öğrenme

browsers = ['Chrome', 'Firefox', 'Safari', 'Opera', 'IE']

browsers.length
=> 5

browsers.count
=> 5

browsers.size
=> 5

Bu elemandan kaç tane var ?

ary = [1, 2, 4, 2]
ary.count(2)
=> 2

Koşula uyan kaç eleman var ?

ary.count { |x| x%2 == 0 }
=> 3

Boş mu ?

browsers.empty?
=> false

Bu eleman var mı ?

browsers.include?('Konqueror')
=> false

İndexi ne ?

a = [ "a", "b", "c" ]
a.index("b")
=> 1
a.index("z")
=> nil

Diziye eleman ekleme

arr = [1, 2, 3, 4]
arr.push(5)
=> [1, 2, 3, 4, 5]

arr << 6
=> [1, 2, 3, 4, 5, 6]

Belirtilen index’e elemanı ekle

arr.insert(3, 'apple')
=> [0, 1, 2, 'apple', 3, 4, 5, 6]

Belirtilen index’e birden fazla eleman ekle

arr.insert(3, 'orange', 'pear', 'grapefruit')
=> [0, 1, 2, "orange", "pear", "grapefruit", "apple", 3, 4, 5, 6]

Diziden eleman silme

arr = [1, 2, 3, 4, 5, 6]
arr.pop
=> 6
arr
=> [1, 2, 3, 4, 5]

Belirtilen indexten eleman silme

arr.delete_at(2)
=> 4
arr
=> [2, 3, 5]

Belirtilen elemanı dizideki heryerden silme

arr = [1, 2, 2, 3, 2]
arr.delete 2
=> [1, 3]

Dizideki nil değerleri kaldır

arr = ['foo', 0, nil, 'bar', 7, 'baz', nil]
arr.compact
=> ['foo', 0, 'bar', 7, 'baz']
arr
=> ['foo', 0, nil, 'bar', 7, 'baz', nil]

arr.compact!
=> ['foo', 0, 'bar', 7, 'baz']
arr
=> ['foo', 0, 'bar', 7, 'baz']

Dizideki tekrar eden elemanları sil

arr = [2, 5, 6, 556, 6, 6, 8, 9, 0, 123, 556]
arr.uniq
=> [2, 5, 6, 556, 8, 9, 0, 123]

Dizilerde döngü

arr = [1, 2, 3, 4, 5]
arr.each { |a| print a -= 10, " " }
-9 -8 -7 -6 -5
arr.reverse_each { |a| print a }
54321

Dizideki elemanları modifiye ederek yeni bir dizi oluşturma

map ve collect metodları aynı işi görür.

arr.map { |a| 2*a }   #=> [2, 4, 6, 8, 10]
arr                   #=> [1, 2, 3, 4, 5]
arr.map! { |a| a**2 } #=> [1, 4, 9, 16, 25]
arr                   #=> [1, 4, 9, 16, 25]

Dizide belli koşullara uyan elemanları seçme

arr = [1, 2, 3, 4, 5, 6]

# 3 ten büyükleri seç
arr.select { |a| a > 3 }
=> [4, 5, 6]

# 3 ten küçükleri çıkar
arr.reject { |a| a < 3 }
=> [3, 4, 5, 6]

# 4 ten küçükleri çıkar
arr.drop_while { |a| a < 4 }
=> [4, 5, 6]

arr
=> [1, 2, 3, 4, 5, 6]

Elemanları birleştirme

[ "a", "b", "c" ].join("-")
=> "a-b-c"

Dizideki elemanların kombinasyonları

a = [1, 2, 3]
a.permutation.to_a
=> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

a.permutation(1).to_a
=> [[1],[2],[3]]

a.permutation(2).to_a
=> [[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]]

a.permutation(3).to_a
=> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

a.permutation(0).to_a
=> [[]] # one permutation of length 0

a.permutation(4).to_a
=> []   # no permutations of length 4

Dizideki elemanlardan rastgele seçim

a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
a.sample
=> 7
a.sample(4)
=> [6, 4, 2, 5]

Diziyi karıştır

a = [ 1, 2, 3 ]
a.shuffle
=> [2, 3, 1]

Kaynaklar

ruby-doc

Aşkın Gedik
Ruby on Rails Developer

Ben Aşkın, Protel Teknoloji Çözümlerinde yazılım geliştirme takım lideri olarak çalışıyorum.

Benimle ilgili daha fazla bilgiyi hakkımda sayfasına göz atarak veya Twitter, Facebook, Github ve Gplus üzerinden takip ederek öğrenebilirsiniz.