Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays “我该怎么做?”;“修剪”;我的字符串数组?_Arrays_Ruby_Trim - Fatal编程技术网

Arrays “我该怎么做?”;“修剪”;我的字符串数组?

Arrays “我该怎么做?”;“修剪”;我的字符串数组?,arrays,ruby,trim,Arrays,Ruby,Trim,对于Ruby,我很好奇如果字符串数组的前导元素和结尾元素为空(要么nil要么空字符串),如何删除它们。如果我有一个数组 ["", "a", "", "b", nil, ""] 我希望结果是 ["a", "", "b"] 我找到了一种使用 arr.pop until arr.last || arr.empty? 但这似乎只适用于修剪数组末尾的nil元素。它不解决空字符串或从数组前面删除空白元素。 这是一种笨拙的解决方案,包括测试第一个元素并用移位删除它,同时用最后一个和 POP: list

对于Ruby,我很好奇如果字符串数组的前导元素和结尾元素为空(要么
nil
要么空字符串),如何删除它们。如果我有一个数组

["", "a", "", "b", nil, ""]
我希望结果是

["a", "", "b"]
我找到了一种使用

arr.pop until arr.last || arr.empty?

但这似乎只适用于修剪数组末尾的
nil
元素。它不解决空字符串或从数组前面删除空白元素。

这是一种笨拙的解决方案,包括测试第一个元素并用<代码>移位删除它,同时用最后一个和 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?
方法,这是一种更严格的测试,要求定义字符串并至少包含一个非空格字符。

这里有一种笨拙的解决方案,包括测试第一个元素并使用
shift
将其删除,对最后一个和
弹出窗口执行相同操作时:

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"]
array.
 drop_while { |element| element.nil? || element.empty? }.
 reverse.
 drop_while { |element| element.nil? || element.empty? }.
 reverse
请记住,在Ruby中,空字符串在逻辑上仍然是真的,因为任何不是字面上的
nil
false
的字符串都是真的。如果您使用Ruby on Rails或使用ActiveSupport,则可以访问
.present?
方法,这是一种更严格的测试,要求定义字符串并至少包含一个非空格字符

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
如果要删除重复项,请执行以下操作:

blank = ->(element) { element.nil? || element.empty? }

array.drop_while(&blank).reverse.drop_while(&blank).reverse

如果您使用的是主动支持,您可以直接执行:

array.drop_while(&:blank?).reverse.drop_while(&:blank?).reverse
如果
e#=>nil
e.to#u#=>“


如果
e#=>nil
e.to#u s#=>“

这听起来像一个“”。我建议您显示生成数组的内容,因为这听起来应该是您要问的内容。这听起来像一个“”。我建议您显示生成数组的内容,因为这听起来应该是您要询问的内容。
array.drop\u while(&blank)。reverse\u each.drop\u while(&blank)
稍好一些IMO@steenslag为什么你的建议更好?@steenslag,我忘了它的存在(:@Natalia,有了它,你实际上并不是在反转数组。你只是按相反的顺序遍历它。
数组。边倒边倒(&blank)。每个都倒。边倒边倒(&blank)
稍微好一点IMO@steenslag为什么你的建议更好?@steenslag,我忘了它的存在(:@Natalia,有了它,你实际上并没有反转数组。你只是按相反的顺序遍历它。如果数组是[],上面给出了一个仅供参考的错误。很好的一点。如果数组只包含
nil
'
,这也是一个问题。我修复了它。如果数组是[],则仅供参考,上面给出了一个错误。很好。如果数组中只包含
nil
'
,这也是一个问题。我修复了它。