1
a = [ 1, 3, 5, 7, 9 ]    → [1, 3, 5, 7, 9]

a[2, 2] = ’cat’          → [1, 3, "cat", 9]

a[2, 0] = ’dog’          → [1, 3, "dog", "cat", 9]

a[1, 1] = [ 9, 8, 7 ]    → [1, 9, 8, 7, "dog", "cat", 9]

a[0..3] = []             → ["dog", "cat", 9]

a[5..6] = 99, 98         → ["dog", "cat", 9, nil, nil, 99, 98]

I can understand how the last four amendments to this array work, but why do they use a[2, 2] = 'cat' and a[2,0] = 'dog' ???

What do the two numbers represent?

Couldnt they just use a[2] = 'dog'?

2 Answers 2

4

a[x,n] is the subarray of a with length n starting at index x.

Thus a[2,2] = 'cat' means "take the items at positions 2 and 3" and replace them with 'cat', which is why this replaces 5 and 7 - not just 5.

a[2,0] = 'dog' means "take the empty subarray before position 2 and replace it with 'dog'". This is why no elements are replaced (a[2] = 'dog' would simply replace cat with dog).

Sign up to request clarification or add additional context in comments.

Comments

1

It will be clear if you check slice contents before assigning it

> a = [ 1, 3, 5, 7, 9 ] 
> a[2, 2]
=> [5, 7] # this mean if you assign to that, the content overwrite on that part
> a
=> [1, 3, "cat", 9]

Also same for the a[2, 0] = ’dog’

> a[2,0]
=> [] # it will not overwrite anything,
> a[2, 0] = "dog" #but slice starts at index 2, so it will just insert 'dog' into array
=> [1, 3, "dog", "cat", 9]

On the other side, a[2] returns 5, and assigned that will overwrite the data, so its not same.

> a = [ 1, 3, 5, 7, 9 ]
> a[2]
=> 5
> a[2] = 'dog'
=> [1, 3, "dog", 7, 9] # a[2] got overwritten, instead of getting inserted.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.