当前位置:  开发笔记 > 编程语言 > 正文

从数组创建哈希的最简洁方法

如何解决《从数组创建哈希的最简洁方法》经验,为你挑选了4个好方法。



1> August Lille..:

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


group_by有一个数组作为值,而index_by假设每个键只有一个项目,因此值是单个项目,而不是数组.

2> zed_0xff..:

最短的一个?

# 'Region' is a sample class here
# you can put 'self.to_hash' method into any class you like 

class Region < ActiveRecord::Base
  def self.to_hash
    Hash[*all.map{ |x| [x.id, x] }.flatten]
  end
end



3> Fedcomp..:

如果有人得到普通阵列

arr = ["banana", "apple"]
Hash[arr.map.with_index.to_a]
 => {"banana"=>0, "apple"=>1}



4> ewalshe..:

您可以自己将to_hash添加到Array.

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

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有