2017-08-24 141 views
0

我有一個方法,需要很多參數,包括附件,我想包含在哈希中,只有非空。有沒有一種方法可以在不爲這兩種情況構建散列的情況下編寫此代碼 我目前的哈希的數組類似將散列添加到散列數組如果不爲空?

messagehash = [{ :from => fromhash, 
        :content => contenthash, 
        :to => tohash, 
        :sentDate => datetime.to_i, 
        :isPrivate => false, 
        :sourceInboxes => [sender.email], 
        :subject => subject}] 

我可以哈希添加到列表中,如果條件得到滿足? 這樣的事情也許

if attachment 
    messagehash[0].attachment = attachment_hash 
end 

因此,它可以結束這樣

messagehash = [{ :from => fromhash, 
       :content => contenthash, 
       :to => tohash, 
       :sentDate => datetime.to_i, 
       :isPrivate => false, 
       :sourceInboxes => [sender.email], 
       :subject => subject, 
       :attachment => attachment_hash}] 
+0

在[條件鍵/值的可能的複製一個紅寶石哈希](https://stackoverflow.com/questions/5750770/conditional-key-value-in-a-ruby-hash) – marcusshep

+0

有點不同,這是一個哈希數組,所以我不知道 –

回答

2

是的,當然你可以:

messagehash[0][:attachment] = attachment_hash if attachment 
1

首先,好像你有一個數組只有一個元素,一個散列。這是你想要的,還是隻是一個哈希?

例如,你有什麼:

messagehash = [{ :from => fromhash, 
        :content => contenthash, 
        :to => tohash, 
        :sentDate => datetime.to_i, 
        :isPrivate => false, 
        :sourceInboxes => [sender.email], 
        :subject => subject}] 

需要messagehash[0][:from]訪問fromhash VS只是messagehash[:from]如果省略[]像這樣:

messagehash = {  :from => fromhash, 
        :content => contenthash, 
        :to => tohash, 
        :sentDate => datetime.to_i, 
        :isPrivate => false, 
        :sourceInboxes => [sender.email], 
        :subject => subject} 

,如果你打算將散列作爲數組的第一個元素,然後如下所示:

messagehash[0][:attachment] = attachment_hash if attachment_hash 

應該工作。但我覺得你真的只是想將項目添加到一個哈希(未散列的數組,你上面提到),所以像這樣的工作 H:

messagehash = { :from => fromhash, 
        :content => contenthash, 
        :to => tohash, 
        :sentDate => datetime.to_i, 
        :isPrivate => false, 
        :sourceInboxes => [sender.email], 
        :subject => subject} 

messagehash[:attachment] = attachment_hash if attachment_hash