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

我在起诉Ruby 2.3。 当我想通过值从数组中删除字符串元素时,我可以这样做

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

但是如何以不区分大小写的方式删除元素? 也就是说,我该怎么做

 a.delete(“ab”) 

表现得像

 a.delete(“AB”) 

试试delete_if

 a.delete_if { |s| s.downcase == 'ab' } 
 a.reject!{|str| str.casecmp("AB").zero?} 

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

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

 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"] 

要删除arrtarget的最后一个实例,只需用rindex替换index rindex

请参见Array#delete_at , Array#index和Array#rindex 。

您可以使用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 } 
Interesting Posts