具有不同大小写的2个字符串数组的交点

时间:2016-07-08 11:11:56

标签: ruby-on-rails arrays ruby

我想获得2个字符串数组的交集。第一个数组有不同的大小写。我想要的结果数组应该尊重第一个数组的外壳,但是2之间的比较应该忽略大小写。 E.g。

^\+(?:[\d]{2})$

结果应为:

letters = ['Aaa', 'BbB', 'CCC']

permitted = ['aaa', 'bbb']

我在做:

['Aaa', 'BbB']

但这会返回letters.map(&:downcase) & permitted.map(&:downcase)

这样做的好方法是什么?更长的方法是:

['aaa', 'bbb']

但是有更短/更整洁的方式吗?

2 个答案:

答案 0 :(得分:3)

您可以使用select

search = permitted.map(&:downcase)
letters.select{|letter|
  search.include?(letter.downcase)
}

甚至更整洁(imho):

-> search { 
  letters.select{|x| search.include?(x.downcase)}
}.call(permitted.map(&:downcase))

Demonstration

答案 1 :(得分:2)

有一种以不区分大小写的方式比较字符串的方法,String#casecmp

letters = ['Aaa', 'BbB', 'CCC']
permitted = ['aaa', 'bbb']

letters.select{|l| permitted.detect{|p| p.casecmp(l) == 0 } } # => ["Aaa", "BbB"]

您也可以use regular expressions。 :)

letters = ['Aaa', 'BbB', 'CCC']
permitted = ['aaa', 'bbb']

letters.grep(Regexp.new(permitted.join('|'), Regexp::IGNORECASE)) # => ["Aaa", "BbB"]