Преобразование массива в хэш - PullRequest
1 голос
/ 20 октября 2011

Я запутался в этом поведении.Мне действительно нужно разделить мой массив, чтобы это работало?

pry(main)> ary = ["foo", "bar"]
=> ["foo", "bar"]

pry(main)> Hash[ary]
=> {"f"=>"o", "b"=>"a"}

pry(main)> Hash["foo", "bar"]
=> {"foo"=>"bar"}

pry(main)> Hash[["foo", "bar"]]
=> {"f"=>"o", "b"=>"a"}

pry(main)> Hash[ary.split(",")]
=> {"foo"=>"bar"}

1 Ответ

3 голосов
/ 20 октября 2011

Попытки 1 и 3 выше эквивалентны, передавая один одномерный массив конструктору, что не правильно.

Чтобы это работало так, как вы ожидаете, вам нужно передать параметры в виде отдельных аргументов или в виде двумерного массива пар>

# Split the array into args (equivalent to example #2 above)
# equivalent to Hash[key1, val1, key2, val2]
Hash[*ary]

# or wrap the array in another array (an array of nested pairs)
# equivalent to Hash[[[key1,val1],[key2,val2]]]
Hash[[ary]]

Неправильное поведениевидение предположительно потому, что конструктор ожидает массив массивов длины 2, в то время как вы передали массив строк.Он интерпретирует arg[0] как ключ для каждой пары и arg[1] как значение, в этом случае f и o, b и a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...