2012-08-13 55 views
5

我有方法:接受任一散列或散列的陣列作爲參數傳遞給一個Ruby方法

def self.store(params) 
    params.each { } 
end 

它完美,如果我通過哈希值的陣列:

params = [ { key: 'value' }, { key: 'value' } ] 

然而,我可能想通過只有一個哈希,而不是哈希的數組:

params = { key: 'value' } 

什麼將b e最乾淨的Ruby方式將哈希轉換爲哈希數組?

Array()方法確保總是返回一個數組,但是當傳遞Hash時,它將轉換爲數組本身。

Array({ key: 'value' }) => [[:key, 'value']] 

我需要什麼:

{ key: 'value' } => [ { key: 'value' } ] 

是否有實現這個任何好的方式,或做我必須做的手動型與is_a檢查(陣列)?

回答

6

對我來說,最好的解決辦法是將方法更改爲:

def self.store(*hashes) 
    params = hashes.flatten 
    puts params.inspect 
end 
  • 如果你傳遞一個哈希值,這將是一個數組
  • 如果你傳遞一個散列數組,它仍然是相同的
  • 如果你使用N散列,它將所有參數壓縮成一個散列二維數組。

你可以通過任何你想要的。

self.store({:key => 'value'}) # => [{:key => 'value'}] 
self.store({:key => 'value'}, {:foo => 'bar'}) # => [{:key => 'value'}, {:foo => 'bar'}] 
self.store([{:key => 'value'}, {:foo => 'bar'}]) # => [{:key => 'value'}, {:foo => 'bar'}] 
3

試試這個

def self.store(params) 
    params = [params].flatten 
    ... 
end 
0

我會做這樣的:

def self.store(params) 
    (params.is_a?(Array) ? params : [params]).each {|single_hash| } 
end 
相關問題