簡體   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