Как лучше всего преобразовать массив в хеш в Ruby

ПРИМЕЧАНИЕ. Краткое и эффективное решение hashmaps см. в Marc-André Lafortune's answer ниже.

Этот ответ изначально static-array предлагался как альтернатива static-array подходам с использованием jsonarray flatten, которые на момент array-of-objects написания были наиболее популярны. Я hashmap должен был пояснить, что hashmaps я не собирался представлять array этот пример как передовой string-array опыт или эффективный подход. Далее ruby следует исходный ответ.


Предупреждение! Решения, использующие character-arrays flatten, не сохраняют ключи или swift-array значения массива!

Основываясь bytearray на популярном ответе @John javascript-array Topley, давайте попробуем:

a3 = [ ['apple', 1], ['banana', 2], [['orange','seedless'], 3] ]
h3 = Hash[*a3.flatten]

Это ruby вызывает ошибку:

ArgumentError: odd number of arguments for Hash
        from (irb):10:in `[]'
        from (irb):10

Конструктор character-arrays ожидал массив четной длины hashmaps (например, ['k1', 'v1,' k2 bytearray ',' v2 ']). Что еще хуже, другой string-array массив, который сглаживается swift-array до одинаковой длины, просто jsonarray молча дает нам хэш с неправильными javascript-array значениями.

Если вы хотите hashmaps использовать ключи или значения bytearray массива, вы можете использовать arrays карту:

h3 = Hash[a3.map {|key, value| [key, value]}]
puts "h3: #{h3.inspect}"

Это сохраняет ключ массива:

h3: {["orange", "seedless"]=>3, "apple"=>1, "banana"=>2}

ruby

arrays

hashmap

2022-10-29T06:28:54+00:00