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}}