У Array элемент выбирают по целочисленному индексу: 0 — первый, отрицательные индексы отсчитываются от конца. У Hash ключ — объект, связанный со значением; например, строка, символ или число. Ключ Hash 3 не означает четвёртую позицию. Строка "name" и символ :name — разные ключи.
Что является ключом в массиве и хеше Ruby?
Целочисленная позиция Array и произвольный ключ Hash — похожая запись доступа, но разная семантика.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для массива точнее говорить об индексе, а не о ключе словаря. Индекс описывает позицию элемента:
numbers = [10, 20, 30]
p numbers[0] # 10
p numbers[2] # 30
p numbers[-1] # 30: отсчёт от конца
У хеша ключ задаётся явно и связан с определённым значением:
values = { "apple" => 1, banana: 2, 3 => "cherry" }
p values["apple"] # 1
p values[:banana] # 2
p values[3] # "cherry"
Последний пример не читает четвёртый элемент. Он ищет именно ключ 3, независимо от позиции пары при обходе хеша. Сохранение Hash порядка вставки не превращает его в массив с числовыми позициями.
По умолчанию ключи Hash сопоставляются через hash и eql?. Поэтому "banana" и :banana не взаимозаменяемы. У пользовательских объектов-ключей эти методы должны быть согласованы, а влияющее на них состояние желательно не менять после вставки.
Операция [] для отсутствующего индекса массива обычно возвращает nil; для отсутствующего ключа хеша возвращается его значение по умолчанию, первоначально тоже nil. Если отсутствие нужно считать ошибкой, у обеих коллекций есть fetch. Array, Hash.