SORU
1 Mart 2011, Salı


Üzerinde Sayısız yineleme atla#toplamak

(1..4).collect do |x|
  next if x == 3
  x   1
end # => [2, 3, nil, 5]
    # desired => [2, 3, 5]

next koşul yerine, collect Dizi nil koyar, oysa yapmaya çalıştığım şey koymakhayırbu durumda döndürülen dizideki öğe bir araya geldi. Olası geri döndü dizisi delete_if { |x| x == nil } haber vermeden bu?

(Ruby 1.8.7; benim kod alıntı ağır soyutlanmış kullanarak)

CEVAP
1 Mart 2011, Salı


Yöntem sadece bu amaca hizmet eder: Enumerable#reject var

(1..4).reject{|x| x == 3}.collect{|x| x   1}

Doğrudan başka bir giriş olarak bir yöntem, bir çıkış kullanarak uygulama deniryöntem zincirlemeRuby ve çok yaygındır.

BTW, map (collect) çıkış tek giriş sayısız doğrudan eşleme için kullanılır. Eğer elementlerin farklı sayı çıktı gerekiyorsa, şans Enumerable başka bir yöntem gerekir.

Edit: Eğer rahatsız ederek aslında bazı unsurları yineledi iki kez kullanabilirsiniz daha zarif bir çözüm dayalı inject (veya benzer adlı yöntem each_with_object):

(1..4).each_with_object([]){|x,a| a << x   1 unless x == 3}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • lane182videos

    lane182video

    6 EKİM 2011
  • Sams Page :D

    Sams Page :D

    15 Mart 2009
  • Stevie

    Stevie

    2 Mayıs 2010