如何以不区分大小写的方式从数组中删除元素?
我在起诉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?}
casecomp
是String#<=>
的不区分大小写的版本。
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"]
要删除arr
中target
的最后一个实例,只需用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 }