我有一个如下所示的数组:
["a", " OR ", "bc cd", " NOT ", "e"]
关于如何删除NOT旁边的元素?我已经展示了静态的例子。数组中的值是动态的。我必须找到NOT运算符,我必须在所有数组中删除NOT的下一个单词。
由于
答案 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,这将导致范围异常异常。