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

  • Gavin Hoey

    Gavin Hoey

    21 Aralık 2007
  • olinerd

    olinerd

    23 AĞUSTOS 2007
  • PamtheBlamofficial

    PamtheBlamof

    31 Aralık 2010