Ruby Arrays
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