Версия bta с использованием a.index (5) является самой быстрой:
a[a.index(5)] = b if a.index(5) # 5.133327 sec/10^6
Как минимум на 10% быстрее, чем Райан Макгири :
a.map!{ |x| x == 5 ? b : x } # 5.647182 sec/10^6
Однако обратите внимание, что a.index (5) возвращает только первый индекс, где найдено 5.
Итак, учитывая массив, где 5 появляется более одного раза, результаты будут другими:
a = [1, 2, 3, 4, 5, 5]
b = [11,22,33,44]
a[a.index(5)] = b if a.index(5)
a.flatten # => [1, 2, 3, 4, 11, 22, 33, 44, 5]
a.map!{ |x| x == 5 ? b : x }
a.flatten # => [1, 2, 3, 4, 11, 22, 33, 44, 11, 22, 33, 44]