Ruby’de İki Diziden Değerleri Haritalama
Eğer Python’dan Ruby’ye geçiş yapıyorsanız ve bazı tanıdık işlevsellikleri yeniden üretmeye çalışıyorsanız, yaygın bir zorlukla karşılaşabilirsiniz: iki diziden değerleri haritalamak ve ardından sonuçları azaltmak. Bu blog yazısı, Ruby’deki çözümü adım adım açıklayarak size rehberlik edecektir.
Problemi Anlamak
Python’da genellikle iki listeyi eleman bazında birleştirmek için map()
fonksiyonunu kullanırsınız ve ardından sonuçları toplamak için reduce()
ile devam edersiniz. Ruby geliştiricisi olarak, eşdeğer yöntemlerin biraz farklı olduğunu görebilir ve benzer bir işlevselliği uygulamaya çalışırken kafanız karışabilir.
Örneğin, Python’da işleminizi şu şekilde ifade edebilirsiniz:
sum = reduce(lambda x, y: x + y, map(lambda x, y: x * y, weights, data))
Bu kod parçası, weights
ve data
dizilerindeki karşılık gelen elemanları çarparak toplamlarını toplar. Şimdi bunu Ruby’de nasıl başarabileceğimizi keşfedelim.
Ruby Çözümü
Ruby’de, zip
metodu iki diziyi tek bir çiftler dizisine birleştirmenizi sağlar; ardından bunu map
ve reduce
ile işleyebilirsiniz. İşte aynı işlemi Ruby’de gerçekleştirme yolu, basit bir yöntemle.
Adım Adım Açıklama
-
Dizileri
zip
ile Birleştirin:zip
metodu, her iki diziden elemanları eşleştirmeye olanak tanır. -
map
Kullanın: Birleştirildikten sonramap
metodunu kullanarak her bir eleman çifti üzerinde işlem yapabilirsiniz. -
reduce
ile Azaltın: Son olarak, sonuçları toplamak içinreduce
kullanın.
Son Ruby kodunuz şu şekilde görünecek:
weights.zip(data).map(&:*).reduce(:+)
Her Adımın Açıklaması
-
weights.zip(data)
:weights
vedata
dizilerini çiftler halinde birleştirir. Eğerweights = [2, 3]
vedata = [4, 5]
ise, sonuç[[2, 4], [3, 5]]
olacaktır. -
map(&:*)
:&:*
sentaksı Ruby’de bir kısayoldur;&:*
bloğu, birleştirilmiş dizilerden her bir çift üzerinde uygulanır. Önceki örnek için[8, 15]
sonucunu doğuracak şekilde her çifti çarpar. -
reduce(:+)
: Son olarak, bu metod tüm çarpımları toplar ve toplamı verir. Bizim durumumuzda8 + 15
sonucu23
eder.
ActiveSupport Kullanımı (Ruby 1.8)
Ruby on Rails kullanıyorsanız veya Ruby 1.8’de ActiveSupport’a erişiminiz varsa, aynı işlemi başka bir özellik kullanarak gerçekleştirebilirsiniz:
weights.zip(data).map(&:*).reduce(&:+)
Bu kullanım okunabilirliği artırır ve işlevsel programlama geçmişine sahip olanlar için tanıdık gelir.
Sonuç
Ruby’de iki diziden değerleri haritalamak ve bunları azaltmak hem basit hem de oldukça etkilidir. zip
, map
ve reduce
kombinasyonu ile karmaşık veri manipülasyonlarını ustalıkla yönetmek için güçlü araçlara sahip oluyorsunuz.
Birçok geliştirici Python’un sözdizimiyle rahatken, Ruby farklı yöntemler sunsa da kavramlar oldukça yakındır. Pratik yapmaya devam edin ve Ruby’nin ifade gücü yüksek yöntemlerinin, programlama ihtiyaçlarınız için hem eğlenceli hem de güçlü olduğunu göreceksiniz.
Mutlu Kodlamalar!