2010-08-31 61 views
1

我有三个数组。数组都具有相同的大小并包含相同的元素。但是,这三个数组的顺序不能相同。如何验证元素的顺序不同?比较三个阵列与相同元素的顺序

下面是我实现它:

all_elements_equal = true 
    array1.zip(array2, array3) do |first, second, third| 
     if first != second && second != third && first != third 
      all_elements_equal = false 
     end 
    end 

如果all_elements_equal是假的,想必数组不是以相同的顺序。但是,如果只有一个阵列是不同的,而另外两个是相同的,则可能不会出现这种情况。

所以,我的问题是,我如何使测试更强大,是否有一个更优雅的方式来实现代码?充分披露:我是Ruby的新手。

回答

2

你试过了吗?

array1 == array2 || array1 == array3 || array2 == array3 
+0

+ 1 - 用一个简单的例子测试了一下,逻辑确实按预期工作。 – 2010-08-31 19:21:05

+0

这工作。原来,解决方案比我想象的要简单! – 2010-08-31 19:37:07

+0

一些有点fancier(不一定更好):'[array1,array2,array3] .combination(2).all? {| a,b | a!= b}' – 2010-09-01 15:12:48

0

我不知道Ruby,但我认为你需要反转你的逻辑。

anyElementEqual=false 
do 
    if first==second || first==third || second==third 
     anyElementEqual=true 
end 
etc. 
1

一般来说,如果有N个这样的阵列的阵列arr,只需检查是否存在任何重复的有:

arr.length == arr.uniq.length 

,因为,例如:

[[1,2,3],[2,3,1],[1,2,3]].uniq 
#=> [[1, 2, 3], [2, 3, 1]] 
[[1,2,3],[2,3,1],[2,1,3]].uniq 
#=> [[1, 2, 3], [2, 3, 1], [2, 1, 3]] 
+0

+1支持N个阵列。 – 2010-09-01 02:29:34

相关问题