Ниже приведен вопрос в моем классе.Преобразование массива в хэш (Ruby)
Учитывая переменную
some_array = [[:a, 123], [:b, 456]]
,
новообращенный some_array в этот хэш:{a: 123, b: 456}
Ниже приведен вопрос в моем классе.Преобразование массива в хэш (Ruby)
Учитывая переменную
some_array = [[:a, 123], [:b, 456]]
,
новообращенный some_array в этот хэш:{a: 123, b: 456}
Я начинающий тоже, так что это может быть немного неэффективным, но это, как я бы это объяснить (есть более простые методы, я уверен, но так как вы упомянули, это для класса, я думал, что я объясняю в длинной форме):
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]
.
Надеюсь, что помогло!
Зачем вам это делать, когда метод '.to_h' делает именно это? Хотя для академических целей может быть образовательным, чтобы реализовать такие вещи, решение состоит в том, чтобы прочитать руководство и посмотреть, какие инструменты доступны. – tadman
Спасибо @tadman, так как это кажется основной проблемой, я подумал, что он, должно быть, только что начал, и будет благодарен за объяснение. Но ваш комментарий действительно также, использование доступных инструментов так же важно. –
Я не пытаюсь захлопнуть вас здесь, просто говоря, что в производственном коде вы должны сделать это по книге. Как всегда, хочется больше разобраться и экспериментировать. Например, ваш код можно улучшить, используя ['each_with_object'] (http://ruby-doc.org/core-2.4.0/Enumerable.html#method-i-each_with_object), если вы хотите использовать этот подход. Иногда то, что вы делаете, является допустимым, потому что вы хотите выполнить преобразование на каждом 'item [1]'. – tadman
Чтобы преобразовать в хэш просто использовать .to_h методу
some_array.to_h
'some_array.to_h' –
Возможный дубликат [Что это лучший способ преобразовать массив в хэш в Ruby,] HTTP (: // stackoverflow.com/questions/39567/what-is-the-best-way-to-convert-an-array-to-a-hash-in-ruby) –
Пожалуйста, прочитайте «[ask]», включая связанные страницы, [mcve] ", если у вас есть проблема с кодом, который вы написали, и http://meta.stackoverflow.com/q/261592/128421 –