2017-02-17 2 views
0

Я работаю на практике вопрос, который просит меня, чтобы создать group_by_owners функцию, котораяФункция, которая принимает хэш-ключ и возвращает несколько значений?

«Принимает хэш, содержащий имя владельца файла для каждого имени файла.

Возвращает хэш, содержащий массив имен файлов для каждое имя владельца, в любом порядке.

Например, для хэша

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

метод group_by_owners должен возвращать

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

До сих пор я не мог ничего передать. Я ожидаю, что я должен взять хэш, поэтому я внедрил новый files = {} и установил соответствующие значения. Но все это я получаю сообщение о синтаксической ошибке

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) 

Я пробовал другие методы, включая

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']) 

Но я до сих пор встречались с ошибками. Я полностью застрял. Я, очевидно, довольно новичок в Ruby, так что медведь со мной. Кто-нибудь знает лучшее решение?

ответ

3

Дело: метод принимает хэша, вы не должны построить хэш, вы просто передать его методу. Ваш метод должен просто работать с переданным аргументом.

Когда я смотрел кодирования я думал точно так же, как вы сейчас;)

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

очень полезно. Благодаря! – MisterCal

Смежные вопросы