aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLuci Phillips <104490260+scorpi4n@users.noreply.github.com>2024-05-17 19:55:15 -0500
committerLouis Pilfold <louis@lpil.uk>2024-05-21 13:58:25 +0100
commit96b2eb1b00d38c6bd6d0d4c1fc01f35573f1b167 (patch)
tree7083672935679f5eb62732ea38b38c5aee2c594a /src
parent0faee2f58d41be64a0fb54a2c728656d59b52370 (diff)
downloadgleam_stdlib-96b2eb1b00d38c6bd6d0d4c1fc01f35573f1b167.tar.gz
gleam_stdlib-96b2eb1b00d38c6bd6d0d4c1fc01f35573f1b167.zip
Test and implement set.symmetric_difference
Diffstat (limited to 'src')
-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),
+ )
+}