-
Notifications
You must be signed in to change notification settings - Fork 0
/
multiset.jl
19 lines (16 loc) · 708 Bytes
/
multiset.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#######################################################################
# Utilities for using multisets
#######################################################################
# For Julia < 1.5 compatibility
const DICT_MERGE! = @static VERSION >= v"1.5" ? mergewith! : merge!
# Multiset → Int
# Returns the number of unique values in `ms`
lengthUnique(ms :: Multiset) = length(ms.data)
# (Multiset, Multiset...) → Multiset
# SIDE EFFECT: modifies `ms`
# Adds up all data from `others` to `ms`
# For example, ("a":2, "b":1) with ("c":2, "b":2) is ("a":2, "b":3, "c":2)
unionMergeWith!(ms :: Multiset, others :: Multiset...) = begin
DICT_MERGE!(+, ms.data, map(ms -> ms.data, others)...)
ms
end