Hi all,
I have a dilemma:
I currently have a type representing an IP address (it's the IPv4 object
from socket.jl with some additional constructors) and another type
representing an IP network. I've extended in and contains to these
respective types, so that, for instance, contains(IPv4network("1.2.3.0/24")
, IPv4("1.2.3.4")) yields true.
Now the issue. I have a dataframe with a column (array) of IPv4networks,
and an IPv4 address I'd like to test against each element in the array,
returning the entire dataframe row if the IPv4network contains the IP
address. I could use a loop, but I think I'd prefer a vector operation (for
elegance, and so I can learn how to do this properly). That is, I'd like to
be able to do something like [row for row in df if df[row,:net] contains
ipaddr] vectorized (and, of course, conditionals aren't allowed in array
comprehensions in any case).
I've looked into @vectorize_2arg but it doesn't seem to allow for different
types, and @vectorize_2arg Any IPnetwork.contains throws warnings (though
it appears to produce the correct output):
julia> @vectorize_2arg Any IPnetwork.contains
Warning: New definition
contains(AbstractArray{T1,N},T2) at operators.jl:372
is ambiguous with:
contains(T1,AbstractArray{T2,N}) at operators.jl:370.
To fix, define
contains(_<:AbstractArray{T1,N},_<:AbstractArray{T2,N})
before the new definition.
contains (generic function with 4 methods)
What's the best way to do this? Thanks for any advice.