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

  • Chriselle Lim

    Chriselle Li

    26 Ocak 2008
  • jagadambarecords

    jagadambarec

    13 AĞUSTOS 2008
  • the one am radio

    the one am r

    6 Mayıs 2006