2011-09-30 40 views
1

如何從Ruby中的數組中刪除尾隨的空和零值。在ruby中從數組中刪除尾隨空值

「緊湊」功能不滿足我的要求。它將從數組中刪除所有'nil'值。但我想單獨刪除尾隨的空值和零值。 請給我任何建議對這個..

+0

是什麼造成你已經尾隨空和零數組中的值?它是分割字符串的結果嗎? –

回答

2
['a', "", nil].compact.reject(&:empty?) => ["a"] 
10

這將做到這一點,應該是很好,如果你只有一對夫婦尾隨nil S和空字符串:

a.pop while a.last.to_s.empty? 

例如:

>> a = ["where", "is", nil, "pancakes", nil, "house?", nil, '', nil, nil] 
=> ["where", "is", nil, "pancakes", nil, "house?", nil, "", nil, nil] 
>> a.pop while a.last.to_s.empty? 
=> nil 
>> a 
=> ["where", "is", nil, "pancakes", nil, "house?"] 

.to_s.empty?位只是投nil一個空字符串quick'n'dirty方式,使兩者nil的d ''可以用單一條件處理。

另一種方法是向後掃描數組你不想切斷的第一件事:

n = a.length.downto(0).find { |i| !a[i].nil? && !a[i].empty? } 
a.slice!(n + 1, a.length - n - 1) if(n && n != a.length - 1) 

例如:

>> a = ["where", "is", nil, "pancakes", nil, "house?", nil, '', nil, nil] 
=> ["where", "is", nil, "pancakes", nil, "house?", nil, "", nil, nil] 
>> n = a.length.downto(0).find { |i| !a[i].nil? && !a[i].empty? } 
=> 5 
>> a.slice!(n + 1, a.length - n - 1) if(n && n != a.length - 1) 
=> [nil, "", nil, nil] 
>> a 
=> ["where", "is", nil, "pancakes", nil, "house?"] 
+0

非常好的解決方案。 – derp