如何删除/删除ruby中另一个单词旁边的数组中的单词?

时间:2017-06-16 06:07:15

标签: arrays ruby

我有一个如下所示的数组:

["a", " OR ", "bc cd", " NOT ", "e"]

关于如何删除NOT旁边的元素?我已经展示了静态的例子。数组中的值是动态的。我必须找到NOT运算符,我必须在所有数组中删除NOT的下一个单词。

由于

3 个答案:

答案 0 :(得分:4)

您可以使用Array#take_while

arr.take_while { |str| str != ' NOT ' }
 #=> ["a", " OR ", "bc cd"]

答案 1 :(得分:1)

您可以在find_index

之后简单地提供范围到数组
def delete_after(element, array)
  if (ind = array.find_index(element)).present?
    array[0...ind]
  else
    array
  end
end

arr = ["a", " OR ", "bc cd", " NOT ", "e"]
delete_after(' NOT ', arr) # => ["a", " OR ", "bc cd", " NOT "]

答案 2 :(得分:1)

对于

arr = ["a", " OR ", "bc cd", " NOT ", "e"]

方法1 :考虑O(n)时间复杂度

new_arr = []
i = 0
while i < arr.length
 break if arr[i].strip == 'NOT' # or arr[i] != ' NOT '
 new_arr << arr[i]
 i += 1
end

方法2 :再次O(n)

new_arr = []
arr.each do |a|
  break if a.strip == 'NOT' # or arr[i] != ' NOT '
  new_arr << a
end

方法3 :关于O(n),但由于索引方法必须找到'NOT'的索引然后产生表格范围的值,它将运行2个后续循环

arr[0...arr.index(' NOT ')] # NOTE 3 dots

另外,我会避免使用方法3,因为如果数组中没有arr.index(' NOT ')' NOT '将返回nil,这将导致范围异常异常。