SORU
21 Kasım 2012, ÇARŞAMBA


Harita Ruby ve sıfır değerleri Kaldırmak

Ya bir değeri değiştirir veya sıfır belirleyen bir harita var. Ben listeden nil girişleri silmek istiyor. Liste tutmaya gerek yok.

Bu benim şu anda ne var:

items.map! { |x| process_x url } # [1, 2, 3, 4, 5] => [1, nil, 3, nil, nil]
items.select! { |x| !x.nil? } # [1, nil, 3, nil, nil] => [1, 3]

Sadece bir döngü ve şartlı olarak böyle bir dizide toplamak olabilir farkındayım:

new_items = []
items.each do |x|
    x = process_x x
    new_items.append(x) unless x.nil?
end
items = new_items

Ama ruby-esque yok gibi görünüyor. Güzel bir şekilde gitmek gibi bir liste nils hariç/kaldırma üzerinde çalıştırmak için bir fonksiyon var mı?

CEVAP
21 Kasım 2012, ÇARŞAMBA


Neden compact kullanmıyorsun?

[1, nil, 3, nil, nil].compact
=> [1, 3] 

İstiyorum hatırlat insanlar, eğer sen almak bir dizi içeren nils olarak çıktı map blok, Bu blok çalışır toplayan dönüş değerleri, o zaman sende kod koku ve ihtiyacı yeniden düşünmek senin mantığınla.

Eğer bir şey yapıyorsan mesela, bunu yapar:

[1,2,3].map{ |i|
  if i % 2 == 0
    i
  end
}
# => [nil, 2, nil]

O zaman yok. Ne yerine, istemiyorum*,* 13 ** 12 malzeme önce veya select istiyorum:

[1,2,3].select{ |i| i % 2 == 0 }.map{ |i|
  i
}
# => [2]

compact bir pisliği temizlemek için kullanarak son çare olarak genellikle bize neyin ne olduğunu bilmiyorduk, çünkü doğru şekilde ele almadık şeylerden kurtulmak için bir çaba olarak görüyorum. Her zaman programımızda çevresinde atılan ne olduğunu bilmemiz gerekiyor; Beklenmeyen/bilinmeyen verileri çok kötü. Her zaman görüyorum nils bir dizi üzerinde çalışıyorum, Ben, bütçeden bir neden var, ve eğer ben geliştirmek kod oluşturma dizisi, yerine izin Ruby için boşa zaman ve bellek üreten nils sonra eleme yoluyla diziye Kaldır onları sonra.

'Just my $%0.2f.' % [2.to_f/100]

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • amc

    amc

    21 EYLÜL 2005
  • Droid Life

    Droid Life

    17 Kasım 2009
  • karneson

    karneson

    23 Temmuz 2006