0

最初にサンプル コードを参照してください。

arr = [4, 5, 6]
arr[2] = ["a","b","c"] # First Update
print arr.join(","), ", len=", arr.length, "\n"
print arr[2] ,"\n"
arr[0..1] = [7,"h","b"] # Second Update
print arr.join(","), ", len=", arr.length, "\n"

出力は次のとおりです。

4,5,a,b,c, len=3
abc
7,h,b,a,b,c, len=4

最初の更新では、要素 2 のみが「abc」に更新されます。しかし、2 回目の更新では、3 つの要素を既存の 2 つの要素に更新すると、1 つの要素が挿入されるため、配列の長さが 1 増加します。

私の質問は、最初の更新が要素の挿入につながらないのはなぜですか? ルールは何ですか?

4

3 に答える 3

2

違いは、最初のケースではなく 2 番目のケースで範囲を使用したためです。代入の左側で範囲をインデックスとして使用すると、Ruby はそれらの要素を右側の配列の個々の要素に置き換えます。整数が左側のインデックスとして使用される場合、その要素は右側の配列全体に置き換えられます。

最初の更新で代わりに言った場合arr[2..2] = ['a', 'b', 'c']、配列の長さは 3 から 5 になります (つまり、配列は [4, 5, 'a', 'b', 'c'] になります)。

これに関する公式ドキュメントはhttp://ruby-doc.org/core-2.0/Array.html#method-i-5B-5D-3Dにあります。

于 2013-08-19T06:03:11.993 に答える
1

最初の更新では、配列内の 1 つの要素を に配置し、チェックアウトarrに使用します。p arr

[4, 5, ["a", "b", "c"]]

2 番目の更新では、配列内の 2 つの要素を配列で置き換えます。

[7, "h", "b", ["a", "b", "c"]]

ルールは次のとおりです。

  1. 単一の整数インデックスで使用される場合、その位置の要素は代入の右側にあるものに置き換えられます。
  2. 範囲で使用すると、元の配列の要素は代入の右側にあるものに置き換えられます。右側はそれ自体が配列であり、その要素は置換で使用されます。
于 2013-08-19T06:04:07.363 に答える