Add zip-into-record to std iter (#9395)

# Description
Adds a new iter feature `zip-into-record` (#9380)

# User-Facing Changes
User can use `[1 2] | iter zip-into-record [3 4]` to create a table `[[1
2]; [3 4]]`

# Tests + Formatting

I noticed trailing spaces in std library that may wish to be cleaned in
the future.

Co-authored-by: amtoine <stevan.antoine@gmail.com>
This commit is contained in:
Astrick 2023-06-10 14:15:30 -04:00 committed by GitHub
parent 9fcc49e556
commit a86f34d0ad
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 0 deletions

View file

@ -197,3 +197,26 @@ export def zip-with [ # -> list<any>
reduce {|it, acc| do $fn $acc $it } reduce {|it, acc| do $fn $acc $it }
} }
} }
# Zips two lists and returns a record with the first list as headers
#
# # Example
# ```nu
# use std ["assert equal" "iter iter zip-into-record"]
#
# let res = (
# [1 2 3] | iter zip-into-record [2 3 4]
# )
#
# assert equal $res [
# [1 2 3];
# [2 3 4]
# ]
# ```
export def zip-into-record [ # -> table<any>
other: list # the values to zip with
] {
into record
| append ($other | into record)
| headers
}

View file

@ -110,3 +110,17 @@ export def test_iter_flat_map [] {
let res = ([1 2 3] | iter flat-map {|it| $it + ($it * 10)}) let res = ([1 2 3] | iter flat-map {|it| $it + ($it * 10)})
assert equal $res [11 22 33] assert equal $res [11 22 33]
} }
export def test_iter_zip_into_record [] {
let headers = [name repo position]
let values = [rust github 1]
let res = (
$headers | iter zip-into-record $values
)
assert equal $res [
[name repo position];
[rust github 1]
]
}