从ruby中的数组中删除尾随空值

时间:2011-09-30 13:58:59

标签: ruby arrays

如何从Ruby中的数组中删除尾随的空值和零值。

“紧凑”功能并未满足我的要求。它正从数组中删除所有'nil'值。但我想单独删除尾随的空值和零值。 请给我任何建议......

2 个答案:

答案 0 :(得分:10)

如果你只有一对尾随nil和空字符串,那就可以了,应该没问题。

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强制转换为空字符串的一种快速方式,因此nil''都可以通过单个句柄处理条件。

另一种方法是向后扫描数组,这是你不想切断的第一件事:

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

答案 1 :(得分:1)

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