Cleanest way to create a Hash from an Array

前端 未结 5 1451
南方客
南方客 2021-02-01 15:56

I seem to run into this very often. I need to build a Hash from an array using an attribute of each object in the array as the key.

Lets say I need a hash of example us

5条回答
  •  旧巷少年郎
    2021-02-01 16:15

    There is already a method in ActiveSupport that does this.

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

    And just for the record, here's the implementation:

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

    Which could have been refactored into (if you're desperate for one-liners):

    def index_by
      inject({}) {|hash, elem| hash.merge!(yield(elem) => elem) }
    end
    

提交回复
热议问题