Не надо так.
Не надо тянуть в типизированный язык, который вас же защищает от ваших же ошибок- не нужно в него тянуть архитектурные принципы из динамических языков.
В лоб: можно заменить интерфейсом-итератором, конкретная реализация которого будет отличаться для разного типа, но сигнатура интерфейса будет та же самая, поэтому его можно будет легко передать в функцию.
Меньше писать, но некрасиво - передавать разных типов массивы в разных по счету параметрах