如果只包含空字符串,则拒绝数组的更优雅的方法

时间:2012-10-08 18:47:37

标签: ruby arrays ruby-on-rails-3

我必须排序(行)数组(行)数组。 (行)数组包含任意数量的字符串。如果(行)数组只包含空字符串,我想从(行)数组中删除它。

我目前正在这样做:

rows.each do |row|

  row.each_index do |i|

   if row[i].length > 0
    break 
   elsif i == row.count-1
    rows.delete(row)
   end

  end

end

但有更优雅的方式吗?

6 个答案:

答案 0 :(得分:5)

稍微简洁一点:

rows.reject! { |row| row.all?(&:empty?) }

答案 1 :(得分:4)

在迭代时修改数组并不是一个好主意 - 你可能会发现你的代码会跳过某些元素或做出奇怪的东西。我做了

rows.reject! {|row| row.all? {|row_element| row_element.empty?}}

如果块row_element.empty?对行中的所有元素的计算结果为true,则拒绝一行。熟悉Enumerable中的所有方法非常值得,它们对于这类任务非常方便。

答案 2 :(得分:4)

使用rails时:

! rows.any?(&:present?)

答案 3 :(得分:2)

您可以使用compact.uniqcompact。如果您的数组具有nil个值,则compact将导致一个空数组,因此您可以像这样检查:

row.compact.size == 0

如果row包含空字符串“”,您可以像这样检查它:

row.compact.uniq.first.blank? and row.size == 1

答案 4 :(得分:0)

    rows.select{|row| row.compact.count >0}

答案 5 :(得分:-1)

此处:rows.all?(&:blank?)