2016-09-02 2 views
1

Ich habe ein einzelnes Array von Hashes, die ich in 3 separate Arrays basierend auf einem Wert sortieren möchte.Sollte ich .select oder .each verwenden, um Hash-Arrays in 3 separate Arrays zu sortieren? (Ruby)

Es gibt zwei offensichtliche Möglichkeiten, dies zu tun.

arr1 = orig_array.select { |h| h[:category] == 1 } 
arr2 = orig_array.select { |h| h[:category] == 2 } 
arr3 = orig_array.select { |h| h[:category] == 3 } 

oder

arr1 = [], arr2 = [], arr3 = [] 

arr.each do |h| 
    if h[:category] == 1 
    arr1 << h 
    elsif h[:category] == 2 
    arr2 << h 
    elsif h[:category] == 3 
    arr3 << h 
    end 
end 

Zunächst scheint es, wie die zweite Methode, während ausführlichen, wäre mehr performant, weil es nur einmal durch die Original-Array-Schleifen. Ich habe mich jedoch gefragt, ob es im Backend von Ruby einige Optimierungen geben könnte, die die eingebrannte .select-Methode schneller und möglicherweise ressourceneffizienter machen würden, obwohl sie algorithmisch weniger effizient ist.

Irgendwelche Einsichten?

Antwort

3

Sie könnten #group_by versuchen:

orig_array.group_by { |h| h[:category] } 

, die einen Hash zurück, wo die Schlüssel Kategorien und die Werte sind, die alle Array-Elemente mit dieser Kategorie.

Ich stimme zu, dass von den beiden Methoden, die Sie gepostet haben, die #each effizienter sein wird.

Verwandte Themen