繁体   English   中英

遍历数组以在Ruby中构造哈希

[英]Iterate through array to construct hash in Ruby

目前我有:

cache_hash = {}
array = [:id, :content, :title]
data_source = some_active_record_object
array.each{ |k| cache_hash[k] = data_source.send(k) } 
cache_hash
#=>{:id=>"value1", :content=>"value2", :title=>"value3"}

我想知道是否有更好的方法遍历数组并散列出来。

编写如下:

cache_hash = Hash[array.map { |k| [k, data_source.send(k)] }]

或使用新的#to_h

cache_hash = array.map { |k| [k, data_source.send(k)] }.to_h

我不确定您是否要遵循此路线,但这是AR查询的替代方法:

Foo.select('id, content, title').to_a.map(&:serializable_hash)

Foo是您正在操作的模型。

这类似于@Arup使用map 的答案 在任何编程语言(不仅是Ruby)中,关于map函数的最酷的事情是,您还可以使用inject函数(在其他语言中也称为foldreduceaggregate )来表达它们:

cache_hash = array.inject({}) do |hash, key|
  hash[key] = data_source.send key
  hash
end

不像使用map Arup回答那么清晰,但无论如何还是很酷的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM