我想知道两个Ruby数组是否具有相同的元素,但不一定是相同的顺序。有没有一种原生的方式来做到这一点? Array的相等运算符似乎检查项目是否相同,顺序是否相同,我需要放松后一个条件。在Ruby中比较两个数组
这将是非常容易写,我只是想知道是否有一个原生的成语。
我想知道两个Ruby数组是否具有相同的元素,但不一定是相同的顺序。有没有一种原生的方式来做到这一点? Array的相等运算符似乎检查项目是否相同,顺序是否相同,我需要放松后一个条件。在Ruby中比较两个数组
这将是非常容易写,我只是想知道是否有一个原生的成语。
[2,1].uniq.sort == [1,2].uniq.sort #=> true
[2,1,4].uniq.sort == [1,2].uniq.sort #=> false
或
a1 = [1,2,3]
a2 = [2,3,1]
p (a2-a1).empty? && (a1-a2).empty? #=> true
a1 = [1,2,3]
a2 = [4,3,1]
p (a2-a1).empty? && (a1-a2).empty? #=> false
a1 = [1,2,3]
a2 = [2,3,1,5]
p (a2-a1).empty? && (a1-a2).empty? #=> false
如果你没有重复的项目要么,你可以使用Set
代替Array
:
Set实现无重复值的集合。 这是Array的直观互操作设施和 哈希快速查找的混合。
例子:
require 'set'
s1 = Set.new [1, 2, 3] # -> #<Set: {1, 2, 3}>
s2 = [3, 2, 1].to_set # -> #<Set: {3, 2, 1}>
s1 == s2 # -> true
a1 = [1, 2, 3, 4]
a2 = [4, 2, 1, 3]
(a1 & a2).size == a1.size # => true
a3 = [1, 2, 3, 5]
(a1 & a3).size == a1.size # => false
'a3 = [1,2,3,4,5 ]'? – Stefan 2013-04-20 21:22:20
如果数组中的数据是可比的,你可以比较之前对它们进行排序。 – 9000 2013-04-20 12:19:37
有可能数组有两次或更多的相同元素?如果是这样,你想用它做什么? – sawa 2013-04-20 13:09:03
[在Ruby中比较两个数组]可能的重复(http://stackoverflow.com/questions/9095017/comparing-two-arrays-in-ruby) – 2016-06-29 19:35:26