We can also construct Tuple
s, which can be faster:
julia> IJ(n) = [i for i = 0:n for j = 0:n-i], [j for i = 0:n for j = 0:n-i]
IJ (generic function with 1 method)
julia> @btime IJ(5);
257.353 ns (8 allocations: 1.06 KiB)
julia> IJ2(n) = ((i for i = 0:n for j = 0:n-i)...,), ((j for i = 0:n for j = 0:n-i)...,)
IJ2 (generic function with 1 method)
julia> @btime IJ2(5);
4.300 ns (0 allocations: 0 bytes)
though you have to avoid the Tuple
constructor because it’s type-unstable:
julia> IJ3(n) = Tuple(i for i = 0:n for j = 0:n-i), Tuple(j for i = 0:n for j = 0:n-i)
IJ3 (generic function with 1 method)
julia> @btime IJ3(5);
1.900 μs (11 allocations: 1.77 KiB)