NAME
FP::HashSet - set operations for hash tables
SYNOPSIS
my
$A
= array_to_hashset [
"a"
,
"b"
,
"c"
];
my
$B
= array_to_hashset [
"a"
,
"c"
,
"d"
];
is_equal hashset_to_array(hashset_union(
$A
,
$B
)),
[
"a"
,
"b"
,
"c"
,
"d"
];
is_equal hashset_to_array(hashset_intersection(
$A
,
$B
)),
[
"a"
,
"c"
];
is_equal hashset_to_array(hashset_difference(
$A
,
$B
)),
[
"b"
];
ok not hashset_is_subset(
$B
,
$A
);
ok hashset_is_subset(+{
b
=> 1},
$A
);
is hashset_size(
$A
), 3;
ok not hashset_empty(
$A
);
ok hashset_empty(+{});
#hashset_keys_unsorted($A) # ("a","b","c") or in another sort order;
# *keys* not values, hence always strings.
is_equal [hashset_keys (
$A
)],
[(
"a"
,
"b"
,
"c"
)];
# (always sorted)
# a la diff tool:
is_equal hashset_diff(
$A
,
$B
), +{
b
=>
"-"
,
d
=>
"+"
};
# to treat a hashset as a function:
my
$f
= hashset_to_predicate (
$A
);
ok
$f
->(
"a"
);
# counting the number of recurrences of keys:
my
$C
= array_to_countedhashset [
"a"
,
"c"
,
"x"
,
"c"
,
"c"
,
"a"
];
is
$C
->{a}, 2;
is
$C
->{c}, 3;
is
$C
->{x}, 1;
DESCRIPTION
Hashsets are hash tables that are expected to have keys representing the values unambiguously (FP::Array::array_to_hashset will just use the stringification).
Note that hashset_to_array will use the *values* of the hashes, not the keys.
NOTE
This is alpha software! Read the status section in the package README or on the website.