ОБНОВЛЕНИЕ: мне удалось немного реорганизовать код, но это все еще вложенный цикл.Рефакторинг каждого цикла
Я думаю, что я разработал способ улучшить код, используя map
и keep_if
. Я не знаю, что это идеальный вариант, потому что это все еще вложенный цикл. выход = {}
array.map do |a|
output[a[0]] = another_array.dup.keep_if do |b|
a[1].include?(b["name"])
end
end
Это немного n00b вопрос. Я пытаюсь выяснить, как я могу реорганизовать вложенный каждый цикл, как тот, который приведен ниже, чтобы я не объявлял дополнительные переменные, которые мне не понадобятся позже, и чтобы мой код работал быстрее.
some_array = [["one", 2, 3], ["two", 3, 4], ["three", 4, 5]]
output = {}
some_array.each do |a|
current_group = []
another_array.each do |b|
current_group << b if something == true
end
output[a[0]] = current_group
end
The output
возвращается как хэш массивов. some_array
- это вложенный массив, в котором первым элементом в каждом под-массиве является строка, а another_array
- это массив хэшей.
Что такое 'group'? –
Возможно, вы хотите ['.inject'] (http://ruby-doc.org/core-2.2.1/Enumerable.html#method-i-inject) – Jon
Как ваш внешний цикл не использует' a'? – ruakh