Новичок в RUBY - Array Вопрос - PullRequest
1 голос
/ 22 апреля 2010
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]

Я могу понять, как работают последние четыре поправки к этому массиву, но почему они используют [2, 2] = 'cat' и [2,0] = 'dog' ???

Что означают два числа?

Не могли бы они просто использовать [2] = 'собака'?

Ответы [ 2 ]

4 голосов
/ 22 апреля 2010

a[x,n] - это подмассив a длиной n, начинающийся с индекса x.

Таким образом, a[2,2] = 'cat' означает «взять предметы в позиции 2 и 3» и заменить их на 'cat', чтопочему это заменяет 5 и 7, а не только 5.

a[2,0] = 'dog' означает «взять пустой подрешетку перед позицией 2 и заменить ее на 'dog'».Вот почему элементы не заменяются (a[2] = 'dog' просто заменит кошку на собаку).

1 голос
/ 22 апреля 2010

Будет ясно, если вы проверите содержимое среза перед его назначением

> 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]

Также то же самое для 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]

С другой стороны, a [2] возвращает 5, и присваивается, что будет перезаписывать данные, поэтому это не то же самое.

> 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...