2017-02-17 2 views
0

ich auf einer Praxis Frage arbeite, die mich ein group_by_owners erstellen fragt funktionieren, dassFunktion, die einen Hash-Schlüssel akzeptiert und mehrere Werte zurückgibt?

„akzeptiert einen Hash der Datei Besitzername für jeden Dateinamen enthält.

Gibt einen Hash ein Array von Dateinamen enthält, die für jeder Name des Inhabers, in beliebiger Reihenfolge.

zum Beispiel für hash

{'Input.txt' => 'Randy', 'Code.py' => 'Stan', 'Output.txt' => 'Randy'} 

die group_by_owners Methode

zurückgeben soll
{'Randy' => ['Input.txt', 'Output.txt']`, `'Stan' => ['Code.py']} 

Bisher konnte ich nichts erreichen. Ich erwarte, dass ich einen Hash aufnehmen soll, also habe ich einen neuen files = {} implementiert und die entsprechenden Werte eingegeben. Aber alles, was ich bekommen, ist ein Syntaxfehler

module FileOwners 
    def self.group_by_owners(files) 
    files = {} 
    files['Randy'] << 'Input.txt' << 'Output.txt' 
    files['Stan'] << 'Code.py' 
    end 
end 


puts FileOwners.group_by_owner(files) 

Ich habe versucht, andere Praktiken einschließlich

module FileOwners 
    def self.group_by_owners(files) 
    files = { 
     'Randy' => 'Input.txt', 
     'Randy' => 'Output.txt' 
     'Stan' => 'Code.py' 
    } 
    end 
end 


puts FileOwners.group_by_owners(files['Randy']) 

Aber ich bin immer noch mit Fehlern erfüllt. Ich bin völlig festgefahren. Ich bin offensichtlich ziemlich neu in Ruby, also ertragen Sie mit mir. Kennt jemand eine bessere Lösung?

Antwort

3

Der Punkt ist: Methode akzeptiert der Hash, Sie müssen nicht einen Hash zu bauen, Sie geben es nur Methode. Ihre Methode muss nur mit dem übergebenen Argument arbeiten.

Als ich starre Codierung ich die gleiche Art und Weise dachte, wie Sie jetzt sind;)

def group_by_owners(files) 
    better_hash = Hash.new { |hash, key| hash[key] = [] } 
    files.each_with_object(better_hash) {|(k, v), hash| hash[v] << k} 
end 

group_by_owners({'Input.txt' => 'Randy', 'Code.py' => 'Stan', 'Output.txt' => 'Randy'}) 
#=> {"Randy"=>["Input.txt", "Output.txt"], "Stan"=>["Code.py"]} 
+0

sehr hilfreich. Vielen Dank! – MisterCal

Verwandte Themen