如何从Ruby中的数组中删除尾随的空值和零值。
“紧凑”功能并未满足我的要求。它正从数组中删除所有'nil'值。但我想单独删除尾随的空值和零值。 请给我任何建议......
答案 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"]