Это должно работать
.to_h принимает массив из нескольких пар значений ключа
[ [:a, [1,2,3]], [:b, [4,5,6]] ].to_h
=> {:a=>[1, 2, 3], :b=>[4, 5, 6]}
[ [:a, [1,2,3]] ].to_h
=> {:a=>[1, 2, 3]}
Hash [] принимает один ключ и значение
Hash[:a, [1,2,3]]
=> {:a=>[1, 2, 3]}
Пока они не будут
.to_h ожидает, что каждый элемент в массиве будет массивом из 2 элементов. Следовательно, если какой-либо элемент в массиве не является самим массивом, он выдает ошибку типа.
[:a, [1,2,3]].to_h
TypeError: wrong element type Symbol at 0 (expected array)
Hash [] с двумя массивами возвращает хеш с первым массивом в качестве ключа и вторым массивом в качестве значения, так как он ожидает один ключ и значение.
Hash[ [:a, [1,2,3]], [:b, [4,5,6]] ]
=> {[:a, [1, 2, 3]]=>[:b, [4, 5, 6]]}