我似乎经常遇到这个问题。 我需要使用数组中每个对象的属性作为键来构建哈希表。
假设我需要一个用其ID作为键的ActiveRecord对象示例的哈希表 通常的方法:
ary = [collection of ActiveRecord objects]
hash = ary.inject({}) {|hash, obj| hash[obj.id] = obj }
另一种方法:
ary = [collection of ActiveRecord objects]
hash = Hash[*(ary.map {|obj| [obj.id, obj]}).flatten]
梦想之路: 我可以自己创建这个功能,但是在Ruby或Rails中有没有类似的东西呢?
ary = [collection of ActiveRecord objects]
hash = ary.to_hash &:id
#or at least
hash = ary.to_hash {|obj| obj.id}
index_by
似乎是 Ruby 的group_by
的重复。我有什么遗漏吗? - JMH['an array', 'of active record', 'objects'].index_by(&:id)
会失败并显示错误NoMethodError: undefined method `id' for "an array":String。 - Sven R.