2017-01-24 2 views
-3

Ниже приведен вопрос в моем классе.Преобразование массива в хэш (Ruby)

Учитывая переменную some_array = [[:a, 123], [:b, 456]],
новообращенный some_array в этот хэш: {a: 123, b: 456}

+2

'some_array.to_h' –

+3

Возможный дубликат [Что это лучший способ преобразовать массив в хэш в Ruby,] HTTP (: // stackoverflow.com/questions/39567/what-is-the-best-way-to-convert-an-array-to-a-hash-in-ruby) –

+0

Пожалуйста, прочитайте «[ask]», включая связанные страницы, [mcve] ", если у вас есть проблема с кодом, который вы написали, и http://meta.stackoverflow.com/q/261592/128421 –

ответ

2

Я начинающий тоже, так что это может быть немного неэффективным, но это, как я бы это объяснить (есть более простые методы, я уверен, но так как вы упомянули, это для класса, я думал, что я объясняю в длинной форме):

hash={} 

some_array.each do |item| 
    hash[item[0]] = item[1] 
end 

Просто объяснить, что немного, я начинаю на с reating пустой хеш, который я буду использовать позже.

Затем я прохожу через some_array с использованием метода each. Это присваивает каждому элементу some_array значение переменной item. Учитывая, что some_array является вложенным массивом (что в основном означает, что это массив массивов), переменная item примет значение внутренних массивов - например, item = [:a, 123].

Затем мы можем получить доступ к каждому элементу в пределах item при создании хэша. Следуя тому же примеру, я дал ранее item[0] == :a и item[1] == 123.

Затем я использую некоторые сокращения при создании хэшей - то есть hash[key] = value. В этом случае я хочу, чтобы ключ был: a (который является элементом [0]), а значение должно быть 123 (которое является элементом [1]). Поэтому я могу использовать hash[item[0]] = item[1].

Надеюсь, что помогло!

+0

Зачем вам это делать, когда метод '.to_h' делает именно это? Хотя для академических целей может быть образовательным, чтобы реализовать такие вещи, решение состоит в том, чтобы прочитать руководство и посмотреть, какие инструменты доступны. – tadman

+0

Спасибо @tadman, так как это кажется основной проблемой, я подумал, что он, должно быть, только что начал, и будет благодарен за объяснение. Но ваш комментарий действительно также, использование доступных инструментов так же важно. –

+0

Я не пытаюсь захлопнуть вас здесь, просто говоря, что в производственном коде вы должны сделать это по книге. Как всегда, хочется больше разобраться и экспериментировать. Например, ваш код можно улучшить, используя ['each_with_object'] (http://ruby-doc.org/core-2.4.0/Enumerable.html#method-i-each_with_object), если вы хотите использовать этот подход. Иногда то, что вы делаете, является допустимым, потому что вы хотите выполнить преобразование на каждом 'item [1]'. – tadman

1

Чтобы преобразовать в хэш просто использовать .to_h методу

some_array.to_h 
Смежные вопросы