Самый чистый способ создать Хеш из Массива

Чтобы применить его повсюду, вы можете сделать что-то вроде

$('body').on('click', function() {
   if($('.children').is(':visible')) {
      $('ul.children').slideUp('slow');
   }
});
28
задан xan 5 January 2009 в 10:52
поделиться

3 ответа

Уже существует метод в ActiveSupport, который делает это.

['an array', 'of active record', 'objects'].index_by(&:id)

И только для справки, вот реализация:

def index_by
  inject({}) do |accum, elem|
    accum[yield(elem)] = elem
    accum
  end
end

, Который, возможно, был пересмотрен в (если Вы отчаянно нуждаетесь в остротах):

def index_by
  inject({}) {|hash, elem| hash.merge!(yield(elem) => elem) }
end
56
ответ дан August Lilleaas 14 October 2019 в 09:56
поделиться

Установите Драгоценный камень Фасетов Ruby и используйте их Массив to_h .

0
ответ дан Lolindrath 14 October 2019 в 09:56
поделиться

Можно добавить to_hash для Выстраивания себя.

class Array
  def to_hash(&block)
    Hash[*self.map {|e| [block.call(e), e] }.flatten]
  end
end

ary = [collection of ActiveRecord objects]
ary.to_hash do |element|
  element.id
end
5
ответ дан ewalshe 14 October 2019 в 09:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: