4

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

我目前正在这样做:

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

但是有没有更优雅的方法呢?

4

6 回答 6

5

稍微简洁一点:

rows.reject! { |row| row.all?(&:empty?) }
于 2012-10-08T20:22:38.470 回答
4

在迭代时修改数组虽然不是一个好主意 - 您可能会发现您的代码会跳过某些元素或做一些奇怪的事情。我会做

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

如果该块row_element.empty?对行中的所有元素评估为真,我们将拒绝该行。熟悉 Enumerable 中的所有方法非常值得,它们对于此类任务非常方便。

于 2012-10-08T18:56:46.700 回答
4

使用导轨时:

! rows.any?(&:present?)
于 2013-08-30T07:34:30.623 回答
2

您可以使用compact.uniqcompact。如果你的数组有nil值,compact 会产生一个空数组,所以你可以像这样检查:

row.compact.size == 0

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

row.compact.uniq.first.blank? and row.size == 1
于 2012-10-08T19:09:08.397 回答
0
    rows.select{|row| row.compact.count >0}
于 2012-10-08T20:03:09.073 回答
-1

这里:rows.all?(&:blank?)

于 2017-07-05T00:49:12.123 回答