【发布时间】:2017-07-16 01:53:05
【问题描述】:
我正在尝试左加入以下哈希数组:
input:
a = [{id: 1, name: 'Bob'}, {id: 2, name: 'Jack'}, {id: 3, name: 'Tom'}]
b = [{id: 3, age: 12}, {id: 2, age: 7}]
output:
[{id: 1, name: 'Bob', age: nil}, {id: 2, name: 'Jack', age: 7}, {id: 3, name: 'Tom', age: 12}]
目前我正在做一些事情:
a.map do |x|
{
id: x[:id],
name: x[:name],
age: (b.detect{|y| x[:id] == y[:id]} || {age: nil}).fetch(:age)
}
end
可以,但是数据量大的时候超级慢。
有没有更好的方法来更高效地执行“加入”操作?
【问题讨论】:
-
把左边的散列数组变成以
:id为键的散列散列,这样你就有了{1 => {id: 1, name: 'Bob'}, 2 => {id: 2, name: 'Jack'}, …}。 -
@CarySwoveland 你是对的。固定!
标签: ruby-on-rails arrays ruby algorithm hash