2012-05-10 43 views
0

我在我的數組中有一個元素,當我打印出該特定元素的值時,我得到一個空值。檢查我的數組中的空元素 - 紅寶石

puts my_listing[2].inspect 
[] 

當我檢查,看看是否特定元素是空的,用empty?返回true:

puts my_listing[2].empty? 
true 

但是,當我在整個陣列週期,檢查,看看是否i是空的,它沒有找到那個特定的元素。

my_listing.each do |i| 
    if i.empty? 
     puts i 
    end 
end 

i(在這種情況下2)是從來沒有打印在屏幕上。

這是爲什麼?基本上,我試圖擺脫數組中所有空的元素(在這種情況下索引爲2),但我不知道如何獲得這些元素。

我錯過了什麼?

謝謝。

回答

0

哦,請重複這樣

 my_listing.each_with_index do |i,index| 
      if i.blank? 
      puts index.inspect 
      end 
     end 

它給你數組的索引,這將是空的或爲零。

+0

'.blank?'方法不起作用,但'.empty?'做。謝謝。 – marcamillion

+0

僅供參考:這是我在執行'.blank?'時發生的錯誤 - ''NoMethodError:未定義方法'空白?'用於[]:Nokogiri :: XML :: NodeSet'。我正在使用Nokogiri並將節點存儲在一個數組中。 – marcamillion

+0

如何彈出空的元素?我試着在每個中都設置'i.pop',但那不起作用。 'index.pop'也沒有。思考? – marcamillion

7

你沒有看到任何輸出,因爲你忘了使用#inspect 你也可以只寫了:

my_listing.each do |i| 
    i.empty? and p i 
end 

刪除空元素,你可以做到以下幾點:

my_array = [[1],[2],[],[4]] 

p my_array.reject(&:empty?) # => [[1], [2], [4]] 

拒絕來電#空白?在所有元素上移除那些空的元素

+0

謝謝......這很酷。 – marcamillion