计算数组中的匹配元素

Joe*_*amo 5 ruby arrays

给定两个大小相等的数组,如何找到匹配元素的数量而忽略位置?
例如:

  1. [0,0,5]并且[0,5,5]会返回一个匹配,2因为有一个0和一个5共同点;
  2. [1,0,0,3]并且[0,0,1,4]会返回一个匹配,3因为有两个匹配0和一个匹配1;
  3. [1,2,2,3]并且[1,2,3,4]将返回匹配的3.

我尝试了很多想法,但它们都倾向于变得相当粗糙和复杂.我猜这里有一些很好的Ruby习惯用法,或者也许是一个正则表达式,可以很好地回答这个解决方案.

pot*_*hin 3

您可以通过以下方式完成它count

\n\n
a.count{|e| index = b.index(e) and b.delete_at index }\n
Run Code Online (Sandbox Code Playgroud)\n\n

示范

\n\n

或与inject

\n\n
a.inject(0){|count, e| count + ((index = b.index(e) and b.delete_at index) ? 1 : 0)}\n
Run Code Online (Sandbox Code Playgroud)\n\n

示范

\n\n

或与selectand length或其别名\xe2\x80\x93 size):

\n\n
a.select{|e| (index = b.index(e) and b.delete_at index)}.size\n
Run Code Online (Sandbox Code Playgroud)\n\n

示范

\n\n

结果:

\n\n
    \n
  1. a, b = [0,0,5], [0,5,5] 输出: => 2 ;
  2. \n
  3. a, b = [1,2,2,3], [1,2,3,4] 输出: => 3 ;
  4. \n
  5. a, b = [1,0,0,3], [0,0,1,4] 输出 => 3
  6. \n
\n