给定两个大小相等的数组,如何找到匹配元素的数量而忽略位置?
例如:
[0,0,5]并且[0,5,5]会返回一个匹配,2因为有一个0和一个5共同点;[1,0,0,3]并且[0,0,1,4]会返回一个匹配,3因为有两个匹配0和一个匹配1;[1,2,2,3]并且[1,2,3,4]将返回匹配的3.我尝试了很多想法,但它们都倾向于变得相当粗糙和复杂.我猜这里有一些很好的Ruby习惯用法,或者也许是一个正则表达式,可以很好地回答这个解决方案.
您可以通过以下方式完成它count:
a.count{|e| index = b.index(e) and b.delete_at index }\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n或与inject:
a.inject(0){|count, e| count + ((index = b.index(e) and b.delete_at index) ? 1 : 0)}\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n或与selectand length(或其别名\xe2\x80\x93 size):
a.select{|e| (index = b.index(e) and b.delete_at index)}.size\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n结果:
\n\na, b = [0,0,5], [0,5,5] 输出: => 2 ;a, b = [1,2,2,3], [1,2,3,4] 输出: => 3 ;a, b = [1,0,0,3], [0,0,1,4] 输出 => 3。