Кодовый шаблон, который у вас есть, обычно является верным признаком fold
(или, в более общем случае, катаморфизма ), желающего выйти.Ruby предоставляет встроенный метод сворачивания, по историческим причинам он называется inject
.
Непроверенный:
array_one, array_two = some_array.
inject([[], []]) {|(array_one, array_two), value|
[array_one << value.id, array_two << value.name]
}
Не уверен, считаете ли вы, что это «лучше» или нет,Для тех, кто понимает, что такое fold
, это, вероятно, более понятно.Для тех, кто этого не делает, вероятно, нет.
(хотя я думаю, что если вы не не понимаете, что такое fold
, то вы не очень хороший программист на Rubyили даже очень хороший программист на всех , но это только мое мнение.)
Однако говорить, что некоторая итерация является fold
, на самом деле не очень полезно, так как fold
- это общий метод итерации (это означает, что каждая форма итерации может быть выражена как fold
).* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Г}Однако, если у вас нет надежных тестов и результатов профилирования, которые показывают, что этот двойной обход является основным источником проблем с производительностью в вашем приложении, вам действительно не стоит об этом беспокоиться.