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)永远不会打印到屏幕上。

这是为什么?

基本上,我试图摆脱数组中所有为空的元素(在本例中为 index 处的元素2),但我不确定如何获取这些元素。

我错过了什么?

谢谢。

4

2 回答 2

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]]

拒绝来电#empty?在所有元素上并删除那些为空的

于 2012-05-10T11:11:29.603 回答
0

哦,请像这样迭代

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

它为您提供数组的索引,该索引将为空或 nil。

于 2012-05-10T10:55:12.543 回答