array = [[1555,100],[nil,95],[1774,nil],[1889,255]]
從陣列中洗掉第二個和第三個元素的最佳方法是什么,因為它們有NULL欄位?
預期輸出:
array = [[1555,100],[1889,255]]
uj5u.com熱心網友回復:
arr = [[1555,100],[nil,95],[1774,nil],[1889,255]]
arr.reject { |a,b| (a && b).nil? }
#=> [[1555, 100], [1889, 255]]
uj5u.com熱心網友回復:
還有一個選擇:
array.reject { |a| a.any?(&:nil?) }
它與 Cary Swoveland 的答案非常相似,但可以處理任何長度的陣列,并且也可以洗掉[false, nil]。
uj5u.com熱心網友回復:
用于從陣列陣列中.compact洗掉nil元素
array.map(&:compact)
# array = [[1555,100], [95], [1774], [1889, 255]]
編輯
使用.reject!以除去含有子陣列nil的元件。
array.reject! { |e| e.any? nil }
# array = [[1555,100], [1889,255]]
uj5u.com熱心網友回復:
紅寶石 2.7
現在有!
Ruby 2.7 正是filter_map為此目的而引入的。這是慣用的和高性能的,我希望它很快成為常態。
array.filter_map{|i| i unless i.include?(nil)}
#=> [[1555, 100], [1889, 255]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/337100.html
上一篇:RubyOOP-實體方法
