Ruby:使用默认键+数组值创建哈希值

4 ruby arrays hash

我相信之前在一个稍微不同的背景下已经被问过/回答了,我已经看到了一些与此类似的例子的答案 - 但似乎没有任何东西完全适合.

我有一系列的电子邮件地址:

@emails = ["test@test.com", "test2@test2.com"]
Run Code Online (Sandbox Code Playgroud)

我想从这个数组中创建一个哈希,但它必须如下所示:

input_data = {:id => "#{id}", :session => "#{session}", 
              :newPropValues => [{:key => "OWNER_EMAILS", :value => "test@test.com"} , 
                                 {:key => "OWNER_EMAILS", :value => "test2@test2.com"}]
Run Code Online (Sandbox Code Playgroud)

我认为哈希ArrayHash内部让我失望.但我周围玩inject,update,merge,collect,map和有没有运气产生这种类型的动态哈希需要创建基于多少个单元@emails阵列.

有没有人对如何解决这个问题有任何建议?

khe*_*lll 8

所以基本上你的问题是这样的:

有这个数组:

emails = ["test@test.com", "test2@test2.com", ....]
Run Code Online (Sandbox Code Playgroud)

你想要一个像这样的哈希数组:

output = [{:key => "OWNER_EMAILS", :value => "test@test.com"},{:key => "OWNER_EMAILS", :value => "test2@test2.com"}, ...]
Run Code Online (Sandbox Code Playgroud)

一个解决方案是:

emails.inject([]){|result,email| result << {:key => "OWNER_EMAILS", :value => email} }
Run Code Online (Sandbox Code Playgroud)

更新:当然我们可以这样做:

emails.map {|email| {:key => "OWNER_EMAILS", :value => email} }
Run Code Online (Sandbox Code Playgroud)

  • 请原谅我的无知,但是`emails.map {| email | {:key =>"OWNER_EMAILS",:value => email}}`? (9认同)
  • 注入绝对是最好的解决方案 (2认同)