8.1.2. Доступ к элементам массива и присваивание им значений

We use cookies. Read the Privacy and Cookie Policy

8.1.2. Доступ к элементам массива и присваивание им значений

Получить ссылку на элемент и присвоить ему значение можно с помощью методов класса [] и []= соответственно. Каждый из них принимает один целочисленный параметр — либо пару целых чисел (начало и конец), либо диапазон. Отрицательные индексы отсчитываются от конца массива, начиная с -1.

Специальный метод экземпляра at реализует простейший случай получения ссылки на элемент. Поскольку он может принимать только один целочисленный параметр, то работает чуть быстрее.

a = [1, 2, 3, 4, 5, 6]

b = а[0]               # 1

с = a.at(0)            # 1

d = а[-2]              # 5

е = a.at(-2)           # 5

f = а[9]               # nil

g = a.at(9)            # nil

h = a[3,3]             # [4, 5, 6]

i = a[2..4]            # [3, 4, 5]

j = a[2...4]           # [3, 4]

a[1] = 8               # [1, 8, 3, 4, 5, 6]

a[1,3] = [10, 20, 30]  # [1, 10, 20, 30, 5, 6]

a[0..3] = [2, 4, 6, 8] # [2, 4, 6, 8, 5, 6]

a[-1] = 12             # [2, 4, 6, 8, 5, 12]

В следующем примере ссылка на элемент, расположенный за концом массива, приводит к росту массива. Отметим, что подмассив можно заменить другим массивом, содержащим больше элементов, чем было. В этом случае массив также автоматически вырастет.

k = [2, 4, 6, 8, 10]

k[1..2] = [3, 3, 3] # [2, 3, 3, 3, 8, 10]

k[7] = 99           # [2, 3, 3, 3, 8, 10, nil, 99]

Наконец, если одному элементу присвоить в качестве значения массив, то на место этого элемента будет вставлен вложенный массив (в отличие от присваивания диапазону):

m = [1, 3, 5, 7, 9]

m[2] = [20, 30]    # [1,3, [20, 30], 7, 9]

# С другой стороны... m = [1, 3, 5, 7, 9]

m[2..2] = [20, 30] # [1, 3, 20, 30, 7, 9]

Метод slice — синоним метода []:

x = [0, 2, 4, 6, 8, 10, 12]

а = x.slice(2)    # 4

b = x.slice(2,4)  # [4, 6, 8, 10]

с = x.slice(2..4) # [4, 6, 8]

Специальные методы first и last возвращают первый и последний элемент массива соответственно. Если массив пуст, они возвращают nil:

x = %w[alpha beta gamma delta epsilon]

a = x.first # "alpha"

b = x.last  # "epsilon"

Мы уже видели ранее, что иногда ссылка на элементы может возвращать целый подмассив. Но существуют и другие способы обратиться к нескольким элементам.

Метод values_at принимает список индексов и возвращает массив, содержащий только указанные элементы. Его можно использовать в тех случаях, когда диапазон не годится (так как нужные элементы находятся не в соседних позициях).

В более ранних версиях Ruby метод values_at назывался indices (синоним indexes). Теперь эти названия не используются.

x = [10, 20, 30, 40, 50, 60]

y = x.values_at(0, 1, 4) # [10, 20, 50]

z = x.values_at(0..2,5)  # [10, 20, 30, 60]

Данный текст является ознакомительным фрагментом.