diff options
author | Peter <peterhsaxton@gmail.com> | 2020-08-14 08:50:36 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2020-08-14 11:27:21 +0100 |
commit | fdf7145a92a4be1e9780372b8de5c4770ee06d33 (patch) | |
tree | 65799695c2489de3d4a7394111fca84687491764 | |
parent | 36232a3920aa4aaca667d66dfbedfb2d4227a114 (diff) | |
download | gleam_stdlib-fdf7145a92a4be1e9780372b8de5c4770ee06d33.tar.gz gleam_stdlib-fdf7145a92a4be1e9780372b8de5c4770ee06d33.zip |
test and implement unzip
-rw-r--r-- | src/gleam/list.gleam | 11 | ||||
-rw-r--r-- | test/gleam/list_test.gleam | 8 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/gleam/list.gleam b/src/gleam/list.gleam index 06e5a33..c82db2e 100644 --- a/src/gleam/list.gleam +++ b/src/gleam/list.gleam @@ -623,6 +623,17 @@ pub fn strict_zip( } } +fn do_unzip(input, xs, ys) { + case input { + [] -> tuple(reverse(xs), reverse(ys)) + [tuple(x, y), ..rest] -> do_unzip(rest, [x, ..xs], [y, ..ys]) + } +} + +pub fn unzip(input: List(tuple(a, b))) -> tuple(List(a), List(b)) { + do_unzip(input, [], []) +} + /// Insert a given value between each existing element in a given list. /// /// This function runs in linear time and copies the list. diff --git a/test/gleam/list_test.gleam b/test/gleam/list_test.gleam index 31f8f27..eff9fac 100644 --- a/test/gleam/list_test.gleam +++ b/test/gleam/list_test.gleam @@ -264,6 +264,14 @@ pub fn strict_zip_test() { |> should.equal(Error(list.LengthMismatch)) } +pub fn unzip_test() { + list.unzip([tuple(1, 2), tuple(3, 4)]) + |> should.equal(tuple([1, 3], [2, 4])) + + list.unzip([]) + |> should.equal(tuple([], [])) +} + pub fn intersperse_test() { list.intersperse([1, 2, 3], 4) |> should.equal([1, 4, 2, 4, 3]) |