Die anderen Antworten perfekt bieten bereits feine Lösungen. Ich poste dieses, um eine Anwendung für die Methode (wenig bekannt?) assoc
anzuzeigen. Es durchsucht das Array nach einem Subarray mit dem angegebenen ersten Element, fast so, als wäre das Array ein Hash. Dies kann ein Ergebnis verwendet wird array
zu füllen: kann
result = []
arr.each do |name, value|
group = result.assoc(name)
if group
group << value
else
result << [name, value]
end
end
result
#=> [["cat", "15", "20", "356"], ["dog", "17", "89", "336"], ["bird", "65", "545"]]
Der Code weiter zu kurzgeschlossen sein:
arr.each_with_object([]) do |(name, value), result|
group = result.assoc(name)
group ? group << value : result << [name, value]
end
#=> [["cat", "15", "20", "356"], ["dog", "17", "89", "336"], ["bird", "65", "545"]]
assoc
kann auch leicht verwendet werden, um die Werte für einen bestimmten „Schlüssel“ abrufen aus dem result
Array:
name, *values = result.assoc('cat')
name #=> "cat"
values #=> ["15", "20", "356"]
Start mit 'group_by' –
Was Sie bisher versucht haben? – Stefan
_ "** group ** subarrays ** by ** das gleiche ** first ** item" _ → 'group_by (&: first)' sollte dir den Einstieg erleichtern – Stefan