Ich versuche, die folgenden Arrays von Hashes LEFT JOIN:in Ruby: wie "links Join" auf zwei Arrays von Hashes auszuführen effizient
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}]
Derzeit mache ich mit entlang der Linien etwas:
a.map do |x|
{
id: x[:id],
name: x[:name],
age: (b.detect{|y| x[:id] == y[:id]} || {age: nil}).fetch(:age)
}
end
Es funktioniert, aber es ist super langsam, wenn der Datensatz groß ist.
Gibt es eine bessere Möglichkeit, den Join-Vorgang effizienter durchzuführen?
die linke Array von Hashes in einen Hash von Hashes auf dem 'verkeilt Turn: id' so Sie' haben { 1 => {id: 1, Name: 'Bob'}, 2 => {id: 2, Name: 'Jack'}, ...} '. – Ryan
@CarySwoveland Sie haben Recht. Fest! – mye