Home > Mobile >  Edit a single key in hash
Edit a single key in hash

Time:09-29

I have a ruby hash

 obj =
{
"context":{
"conversationIDs": [1, 2, 5], "sessionID":2}
}

I want to edit the conversationIds key with new values and take the uniq of that. What I have tried

 merged = (
             {
context:        obj[:context].merge({
"conversationIDs":  [*obj[:context]["conversationIDs"], 2,
              1, 1].uniq })
             }
)
     puts merged

Actual Output:

{:context=>{:conversationIDs=>[2, 1]}}

Expected Output:

{:context=>{:conversationIDs=>[2, 1, 5]}, :sessionID=>2 }

5 is missing in the output, how to sustain it?

CodePudding user response:

I would do:

obj = {:context=>{:conversationIDs=>[1, 2, 5], :sessionID=>2}}

obj[:context][:conversationIDs] = (obj[:context][:conversationIDs]   [2, 1, 1]).uniq
obj
#=> {:context=>{:conversationIDs=>[1, 2, 5], :sessionID=>2}}

Or:

obj = {:context=>{:conversationIDs=>[1, 2, 5], :sessionID=>2}}

obj[:context][:conversationIDs]  = [1,2,5]
obj[:context][:conversationIDs].uniq!
obj
#=> {:context=>{:conversationIDs=>[1, 2, 5], :sessionID=>2}}

Or – as engineersmnky suggested:

obj = {:context=>{:conversationIDs=>[1, 2, 5], :sessionID=>2}}

obj[:context][:conversationIDs].concat([2, 1, 1]).uniq!
obj
#=> {:context=>{:conversationIDs=>[1, 2, 5], :sessionID=>2}}
  •  Tags:  
  • ruby
  • Related