elegant way of preparing a string from hash values

114 views Asked by At

below is the hash I have

my_hash = {
  "unique_id": [
    {
      "code": "1001",
      "message": "The unique id has already been taken."
    }
  ]
}

I want to prepare a string from the value of above hash. Ex. "1001-The unique id has already been taken."

So far I am able to get the result with below

my_hash.values.flatten.map {|a| a.values.join('-')}.join(',')

I want to know is there any way of doing this in a better way.

Update: my_hash can have multiple hash values.

{"unique_id":[{"code":"1001","message":"The unique id has already been taken."}], "user_id":[{"code":"1002","message":"The user id has already been taken."}]}

And expects value "1001-The unique id has already been taken.,1002-The user id has already been taken."

3

There are 3 answers

1
Camille On

here is a shorter version:

my_hash[:unique_id].first.values.join("-")
0
byakugie On
my_hash = {"unique_id":[{"code":"1001","message":"The unique id has already been taken."}], "user_id":[{"code":"1002","message":"The user id has already been taken."}]}

my_hash.values.map{|v| v.map{|a| "#{a[:code]}-#{a[:message]}"}}.flatten.join(",")
0
Qaisar Nadeem On
my_hash = {"unique_id":[{"code":"1001","message":"The unique id has already been taken"}],"user_id":[{"code":"1002","message":"The user id has already been taken"}]} 


my_hash.flat_map {|k,v| v.map(&:values).join '-'}.to_sentence

or

my_hash.flat_map {|k,v| v.map(&:values).join '-'}.join ','