Я не совсем уверен, как я могу помочь, кроме публикации решения, но может быть, какое-то описание с тем, что вам трудно найти?
Несколько вопросов я заметил:
- Вы используете мимо двух аргументов в блоке, когда массив имеет только 1, значение
- вы вызываете блок с
var
, который не существует в текущем scope, может быть, вы имели в виду val?
- вы не проверить, если что-то уже существует в новом словаре решения
- перезаписываются словарь SOLUTION каждый раз, когда вы перебираете новое значение в массиве
Вот что я придумал:
module Enumerable
def group_by
solution = {}
each do |value|
key = yield value
if solution.key?(key)
solution[key] << value
else
solution[key] = [value]
end
end
solution
end
end
ary = [1, 2, 3, 4, 5]
p ary.group_by { |i| i % 3 }
выход:
{1=>[1, 4], 2=>[2, 5], 0=>[3]}
вы можете сп eck, если блок был предоставлен, если кто-то пытается использовать эту функцию неправильно, подумайте об использовании инструкции unless block_given?
, но, возможно, вы можете попробовать реализовать это самостоятельно.
Привет - вам кажется, что здесь новый. Это действительно помогает нам помочь вам, если вы включите сообщение об ошибке, которое вы получите при попытке запустить ваш код. Сейчас нам очень сложно рассказать, что вы на самом деле просите нас *. «Я этого не понимаю» вовсе не сужает это. Поэтому вы просите нас угадать, что вам нужно, а не просто говорить нам. В будущем - можете ли вы, пожалуйста, дать нам более подробную информацию по вашему вопросу? Это действительно поможет нам помочь вам лучше (это означает, что ваш вопрос будет отвечать быстрее). –