diff --git a/README.md b/README.md index ed46ed8..2aff31a 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ SplittablesBase.jl: * `Iterators.partition` * `Iterators.product` * `Iterators.enumerate` +* `skipmissing` ## Packages using SplittablesBase.jl diff --git a/src/implementations.jl b/src/implementations.jl index 4b42937..90b311e 100644 --- a/src/implementations.jl +++ b/src/implementations.jl @@ -57,6 +57,7 @@ arguments(xs::Base.Generator) = (xs.f, xs.iter) arguments(xs::Iterators.Filter) = (xs.flt, xs.itr) arguments(xs::Iterators.Flatten) = (xs.it,) arguments(xs::Iterators.PartitionIterator) = (xs.c, xs.n) +arguments(xs::Base.SkipMissing) = (xs.x,) safelength(xs) = Base.IteratorSize(xs) isa Union{Base.HasLength,Base.HasShape} ? length(xs) : nothing @@ -261,3 +262,11 @@ function halve(xs::Iterators.Enumerate) left, right = halve(xs.itr) return enumerate(left), zip(length(left)+1:length(xs), right) end + +amount(xs::Base.SkipMissing) = amount(arguments(xs)[1]) + +function halve(xs::Base.SkipMissing) + coll, = arguments(xs) + left, right = halve(coll) + return skipmissing(left), skipmissing(right) +end diff --git a/test/test_halve.jl b/test/test_halve.jl index aae99ca..75bb297 100644 --- a/test/test_halve.jl +++ b/test/test_halve.jl @@ -54,6 +54,8 @@ zip(1:3, partition(1:10, 4)) zip("αβγ") zip(enumerate([11, 22, 33, 44]), 'a':'d') zip(enumerate([11, 22, 33, 44, 55]), 'a':'e') +skipmissing([1, 2, missing, 4]) +skipmissing([1, 2, missing, 4, 5]) """ # An array of `(label = ..., data = ...)`