Skip to content

Commit f8ce649

Browse files
authored
add chunk-optimized unique method (#245)
* add chunk-optimized unique method * use rafaqz's unique method * test for use of iteration * add test for predicate * fix tabstops
1 parent e17f243 commit f8ce649

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/mapreduce.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,10 @@ function Base.count(f, v::AbstractDiskArray)
6666
count(f, v[chunk...])
6767
end
6868
end
69+
70+
Base.unique(v::AbstractDiskArray) = unique(identity, v)
71+
function Base.unique(f, v::AbstractDiskArray)
72+
reduce((unique(f, v[c...]) for c in eachchunk(v))) do acc, u
73+
unique!(f, append!(acc, u))
74+
end
75+
end

test/runtests.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,3 +1061,11 @@ end
10611061
end
10621062
@test count(a) + count(!, a) == length(a)
10631063
end
1064+
1065+
@testset "unique" begin
1066+
a = ChunkedDiskArray((1:100) .& 7, chunksize=(9,))
1067+
out = @capture_out @trace unique(a) DiskArrays
1068+
@test occursin("_iterate_disk", out) == false
1069+
@test length(unique(a)) == length(unique(identity, a)) == 8
1070+
@test unique(x->x>3, a) == [1,4]
1071+
end

0 commit comments

Comments
 (0)