如何以不区分大小写的方式从数组中删除元素?

How do I remove an element from an array in a case-insensitive way?

我要起诉 Ruby 2.3。当我想按值从数组中删除一个字符串元素时,我可以这样做

2.3.0 :005 > a.delete("AB")
 => "AB" 

但是如何以不区分大小写的方式删除元素?也就是说,我怎样才能使

a.delete(“ab”)

表现得像

a.delete(“AB”)

您可以使用 Array#reject 代替,如下所示:

bad_string_downcase = bad_string.downcase
a.reject! { |element| element.downcase == bad_string_downcase }

或使用正则表达式:

a.reject! { |element| element.match %r{^#{bad_string}$}i }

尝试delete_if

a.delete_if { |s| s.downcase == 'ab' }

您的问题是 "remove an element",这意味着您只想在存在重复元素时删除一个元素。如果这是你的意图(并且可能有重复),你可以这样删除第一个或最后一个实例:

arr = ['aB', 'cd', 'Ab', 'ef']

def delete_first(arr, target)
  ndx = arr.index { |s| s.downcase == target }
  ndx.nil? > nil : arr.delete_at(ndx)
end

delete_first(arr, 'ab')
  #=> "aB" 
arr
  #=> ["cd", "Ab", "ef"] 

delete_first(arr, 'de')
  #=> nil 
arr
  #=> ["aB", "cd", "Ab", "ef"] 

要删除 arr 中最后一个 target 实例,只需将 index 替换为 rindex

参见 Array#delete_at, Array#index and Array#rindex

a.reject!{|str| str.casecmp("AB").zero?}  

casecompString#<=> 的不区分大小写的版本。
a.reject!{|str| str.casecmp("ab").zero?} 的行为完全相同。