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
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]
kaldırmak ruby diziden yinelenen öğele...
Objective-C NSMutableArray gelen yinel...
En iyi iki harita birleştirme ve aynı ...
Önde gelen sıfır eklemek/0'belli ...
Harita arasındaki fark Ruby ve toplama...