Учитывая литерал массива, я хотел бы создать хэш, где ключи являются элементами из массива, а значения - это массивы, содержащие остальные/оставшиеся элементы.
Input:
[1, 2, 3]
Вывод:
{1=>[2, 3], 2=>[1, 3], 3=>[1, 2]}
Легко ввести переменную:
arr = [1, 2, 3]
arr.map { |i| [i, arr - [i]] }.to_h
Но с литералом массива единственное решение, которое я мог бы найти, включает instance_exec
или instance_eval
, что кажется хакерским:
[1, 2, 3].instance_exec { map { |i| [i, self - [i]] } }.to_h
Могу ли я игнорировать встроенный метод или очевидное решение? group_by
, combination
, permutation
и partition
, похоже, не помогают.