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

在ruby中从数组中删除尾随空值,ruby,arrays,Ruby,Arrays,如何在Ruby中从数组中删除尾随的空值和nil值 “紧凑型”功能不符合我的要求。它正在从数组中删除所有“nil”值。但我只想删除后面的空值和nil值。 请就此给我任何建议。这样就可以了,如果您只有两个尾随nils和空字符串,则应该可以: ['a', "", nil].compact.reject(&:empty?) => ["a"] a.pop while a.last.to_s.empty? 例如: >> a = ["where", "is", nil, "pan

如何在Ruby中从数组中删除尾随的空值和nil值

“紧凑型”功能不符合我的要求。它正在从数组中删除所有“nil”值。但我只想删除后面的空值和nil值。
请就此给我任何建议。

这样就可以了,如果您只有两个尾随
nil
s和空字符串,则应该可以:

['a', "", nil].compact.reject(&:empty?) => ["a"]
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?"]
>> 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?"]
.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]
>> a.pop while a.last.to_s.empty?
=> nil
>> a
=> ["where", "is", nil, "pancakes", nil, "house?"]
>> 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?"]

这样就可以了,如果您只有两个尾随
nil
s和空字符串,就可以了:

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?"]
>> 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?"]
.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]
>> a.pop while a.last.to_s.empty?
=> nil
>> a
=> ["where", "is", nil, "pancakes", nil, "house?"]
>> 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?"]

是什么导致数组中有尾随的空值和nil值?这是拆分字符串的结果吗?是什么导致数组中有尾随的空值和零值?这是拆分字符串的结果吗?向下投票。你没有用这种方法删除尾随空值和零值。对了,我想知道我怎么会错过问题的那一部分。向下投票。你不是在用这种方法删除tailing empty和nil值。对了,我想知道我怎么会错过问题的这一部分。