如何以不区分大小写的方式从数组中删除元素?
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?}
casecomp
是 String#<=>
的不区分大小写的版本。
a.reject!{|str| str.casecmp("ab").zero?}
的行为完全相同。
我要起诉 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?}
casecomp
是 String#<=>
的不区分大小写的版本。
a.reject!{|str| str.casecmp("ab").zero?}
的行为完全相同。