6

2 つの配列の交差を行う場合、結果の順序が最初の配列の順序に基づいているという保証はありますか?

たとえば、私が持っている場合

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

の代わりに をa & b返すことができますか (これは私が期待することです)?[3,2,1][1,2,3]

RDoc または Pickaxe の Array のドキュメントのいずれにも、これに直接対処するものは見つかりません。

RubySpecには最初に見つかった順に要素を並べた配列を作成するという仕様がありますが、YARV Ruby はその仕様を尊重すると仮定する必要がありますか?

4

3 に答える 3

4

それは保証された機能のようです。リビジョン 39415で RDoc の説明をアップグレードしました。いずれ反映されるはずです。

于 2013-02-23T22:44:40.767 に答える
0

YARV はバージョン 1.9 以降の公式の Ruby インタープリターであるため、その仕様を尊重していると思います。ところで、RubySpec は言語の実行可能な仕様として作成されたため、開発者はこの仕様に合格する独自のインタープリターを作成できます。YARV は RubySpec でこれを念頭に置いて作成されたと思います。

于 2013-02-08T01:41:05.383 に答える
0

ドキュメントに保証はありませんが、交差点は左側のセットの順序に従います。

ソースは、配列aが順序を設定することを示しています。

...
for (i=0; i<RARRAY_LEN(ary1); i++) {
    vv = (st_data_t)(v = rb_ary_elt(ary1, i));
    if (st_delete(RHASH_TBL(hash), &vv, 0)) {
        rb_ary_push(ary3, v);
    }
}
...

テストは簡単です:

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を使用しています

于 2013-02-08T04:39:07.713 に答える