aboutsummaryrefslogtreecommitdiff
path: root/src/gleam/set.gleam
diff options
context:
space:
mode:
Diffstat (limited to 'src/gleam/set.gleam')
-rw-r--r--src/gleam/set.gleam18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/gleam/set.gleam b/src/gleam/set.gleam
index c04ca92..7fb8a41 100644
--- a/src/gleam/set.gleam
+++ b/src/gleam/set.gleam
@@ -325,3 +325,21 @@ pub fn is_subset(first: Set(member), of second: Set(member)) -> Bool {
pub fn is_disjoint(first: Set(member), from second: Set(member)) -> Bool {
intersection(of: first, and: second) == new()
}
+
+/// Creates a new set that contains members that are present in either set, but
+/// not both.
+///
+/// ```gleam
+/// symmetric_difference(from_list([1, 2, 4]), from_list([3, 4])) |> to_list
+/// // -> [1, 2, 4]
+/// ```
+///
+pub fn symmetric_difference(
+ of first: Set(member),
+ and second: Set(member),
+) -> Set(member) {
+ difference(
+ from: union(of: first, and: second),
+ minus: intersection(of: first, and: second),
+ )
+}