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

  • NPR

    NPR

    22 NİSAN 2006
  • PCDIY

    PCDIY

    16 AĞUSTOS 2013
  • Tek Syndicate

    Tek Syndicat

    23 Temmuz 2008