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

  • Bucky Roberts

    Bucky Robert

    9 HAZİRAN 2011
  • Nick Pitera

    Nick Pitera

    8 NİSAN 2006
  • Watcher3223

    Watcher3223

    15 Kasım 2007