В первой, вы передаете в код, который вы хотите выполнить в отношении каждого элемента в массиве. Во-вторых, вы зацикливаетесь на коде и делаете вещи. Функционально нет никакой разницы. Идиоматично, рубисты будут выбирать API API функционального программирования каждый раз. Это культура.
Когда речь заходит о перфомансе, вы не должны потение микро-оптимизации в любом случае, если это не проблема. Все, что измеряется в миллисекундах, не должно рассматриваться как проблема, пока вы фактически не запускаете профилировщик и не обнаружите, где ваш код на самом деле медленный. Большинство кодов не нужно запускать с максимальной эффективностью, производительность разработчиков и ремонтопригодность являются более важными.
Что является проблемой производительности вы испытываете? –