Ruby:创建具有默认键和数组值的哈希表

4

我相信这个问题在稍微不同的情境下已经被问过/回答过,我也看到过一些类似于这个的例子的答案 - 但似乎没有完全符合。

我有一个电子邮件地址的数组:

@emails = ["test@test.com", "test2@test2.com"]

我希望能够从这个数组中创建一个哈希表,但它必须像这样:
input_data = {:id => "#{id}", :session => "#{session}", 
              :newPropValues => [{:key => "OWNER_EMAILS", :value => "test@test.com"} , 
                                 {:key => "OWNER_EMAILS", :value => "test2@test2.com"}]

我认为哈希内的哈希数组让我感到困惑。但是,我已经尝试使用injectupdatemergecollectmap等方法,但都没有成功生成这种需要根据@emails数组中的条目数量创建的动态哈希表。
有人有什么建议吗?
1个回答

8
所以,你的问题基本上是这样的:
有这个数组:
```html

```
emails = ["test@test.com", "test2@test2.com", ....]

你希望有一个类似于这样的哈希数组:
output = [{:key => "OWNER_EMAILS", :value => "test@test.com"},{:key => "OWNER_EMAILS", :value => "test2@test2.com"}, ...]

一个解决方案是:

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

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

emails.map {|email| {:key => "OWNER_EMAILS", :value => email} }

2
注入(inject)绝对是最佳解决方案。 - Matt Briggs
1
啊哈!原来是这样我才能注入!这对我帮助很大...它不仅解决了我的问题,还让我更好地理解了注入。谢谢! - Dae
在其他编程语言中使用Indeed inject或map_reduce是一种很酷的方式来迭代一个集合并对其所有元素应用某些操作,同时将部分结果移动到后续元素。 - khelll
9
请原谅我的无知,但 emails.map {|email| {:key => "OWNER_EMAILS", :value => email} } 有什么问题吗? (翻译说明:保持原意,简化句子,不添加额外解释) - sepp2k
@sepp2k 你真是个大师 ;),当然使用 #map 也可以,但我想展示一下 inject 的其他用法 :D 谢谢! - khelll
当然,我玩了一会儿 #map - 我肯定是过于复杂化解决方案了。 - Dae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接