如果您想坚持使用数组,请尝试以下操作:
arr1 = [['Area1', 12345], ['Area2', 54321]]
arr2 = ['Area1', 33441]
arr1.inject([]){|r,i| r.push(i[0] == arr2[0] ? i.push(arr2[1]) : i)}
在控制台中:
2.3.1 :001 > arr1 = [['Area1', 12345], ['Area2', 54321]]
=> [["Area1", 12345], ["Area2", 54321]]
2.3.1 :002 > arr2 = ['Area1', 33441]
=> ["Area1", 33441]
2.3.1 :003 > arr1.inject([]){|r,i| r.push(i[0] == arr2[0] ? i.push(arr2[1]) : i)}
=> [["Area1", 12345, 33441], ["Area2", 54321]]
看看 polmiro 的回答,我更喜欢他的 map 而不是我的 inject。我相信它们本质上是相同的。除了map 为您创建一个新的array,而使用inject 您必须传入新的array。而且,map 正在执行隐含的 push,而对于 inject,您必须自己完成这项工作。干得好,波尔米罗!
这是他回答的单行版本(如果你喜欢那种东西):
arr1.map{|a| a[0] == arr2[0] ? a << arr2[1] : a}
再次在控制台中:
2.3.1 :001 > arr1 = [['Area1', 12345], ['Area2', 54321]]
=> [["Area1", 12345], ["Area2", 54321]]
2.3.1 :002 > arr2 = ['Area1', 33441]
=> ["Area1", 33441]
2.3.1 :003 > arr1.map{|a| a[0] == arr2[0] ? a << arr2[1] : a}
=> [["Area1", 12345, 33441], ["Area2", 54321]]