使用Ruby,我很好奇如果这些元素为空(nil
或空字符串),如何删除字符串数组的前导元素和结束元素。如果我有一个
["", "a", "", "b", nil, ""]
我希望结果是
["a", "", "b"]
我找到了一种使用
删除数组中不存在的元素的部分方法arr.pop until arr.last || arr.empty?
但这似乎只适用于修剪数组末尾的nil
元素。它不会解决空字符串或从数组前面删除空白元素。
答案 0 :(得分:2)
这是一种笨重的解决方案,涉及测试第一个元素并使用shift
删除它,同时对最后一个元素执行pop
:
list = [nil, "", "a", "", "b", nil, "", nil]
while ((!list.first or !list.first.match(/\S/)) and list.any?)
list.shift
end
while ((!list.last or !list.last.match(/\S/)) and list.any?)
list.pop
end
list
# => ["a", "", "b"]
请记住,在Ruby中,空字符串在逻辑上仍然是正确的,因为任何字面上都不是nil
或false
的字符串。如果您使用的是Ruby on Rails或正在使用ActiveSupport,您将可以访问.present?
方法,这是一个更严格的测试,需要定义字符串并包含至少一个非空格字符。
答案 1 :(得分:1)
array.
drop_while { |element| element.nil? || element.empty? }.
reverse.
drop_while { |element| element.nil? || element.empty? }.
reverse
如果你想删除重复:
blank = ->(element) { element.nil? || element.empty? }
array.drop_while(&blank).reverse.drop_while(&blank).reverse
如果您使用的是有效支持,则可以直接进行支持:
array.drop_while(&:blank?).reverse.drop_while(&:blank?).reverse
答案 2 :(得分:0)
ndx = array.index { |e| !e.to_s.empty? }
array[ndx..array.rindex { |e| !e.to_s.empty? }] unless ndx.nil?
#=> ["a", "", "b"]
如果e #=> nil
,e.to_s #=> ''
。