当交叉完成时,顺序是否保留在数组中?

当我做两个数组的交集时,是否有任何保证结果顺序基于第一个数组的顺序?

例如,如果我有

a = [1,2,3] b = [3,2,1] 

可以a & b返回[3,2,1] ,而不是[1,2,3] (这是我期望的)?

我无法在RDoc或者Pickaxe的Array文档中找到任何直接解决这个问题的东西。

RubySpec有一个规范,它创建一个包含元素的数组,以便它们首次遇到 ,但是我应该假设YARV Ruby会遵守该规范吗?

看起来它是一个有保证的function。 他们升级了修订版39415中的RDoc描述。 它应该在某个时候反映出来。

YARV是1.9版以来的官方Ruby解释器,因此我认为它符合规范。 BTW,RubySpec被创建为该语言的可执行规范,允许开发人员创建自己的解释器,通过此规范,我相信YARV是在RubySpec中创建的。

文档中没有保证,但交叉点遵循左侧集的顺序。

源显示数组a设置顺序:

 ... for (i=0; i 

测试很简单:

 a = [1,2,3] b = [3,2,1] a.size.times do puts "a = #{ a.join(',') }\ta & b = #{ (a & b).join(',') }\tb & a = #{ (b & a).join(',') }" a.rotate! end 

哪个输出:

 a = 1,2,3 a&b = 1,2,3 b&a = 3,2,1
 a = 2,3,1 a&b = 2,3,1 b&a = 3,2,1
 a = 3,1,2 a&b = 3,1,2 b&a = 3,2,1

那是使用Ruby 1.9.3-p374