我有一个多维数组,例如:
array = [["stop", "halt"],["stop", "red"],["go", "green"],["go","fast"],["caution","yellow"]]
我希望你能将它转化为类似于这样的哈希值:
hash = {"stop" => ["halt","red"], "go" => ["green","fast"], "caution" => "yellow"}
然而,当我使用array.to_h时,值会互相覆盖,出现以下情况:
hash = {"stop" => "red", "go" => "fast", "caution" => "yellow"}
我该如何获得所需的数组?
Enumerable#each_with_object
并没有什么神秘的地方,它在1.9版本中首次亮相。假设a
是一个数组,你希望做到这一点:b = []; a.each { |e| b << e+1; b}
,也就是说,1.创建一个对象(b=[]
);2.对a
的每个元素进行操作;3.返回该对象(b
)。这是一个非常常见的模式。a.each_with_object([]) { |e,b| b << e+1 }
可以让你用一行代码完成这三个步骤。没有更多,也没有更少。把这个方法看作是“each
,带有一个对象”。我会编辑以回答你的另一个问题。 - Cary Swoveland