each for filters

Run a closure on each row of the input list, creating a new list with the results.

Signature

> each {flags} (closure)

Flags

  • --keep-empty, -k: keep empty result cells

Parameters

  • closure: The closure to run.

Input/output types:

inputoutput
anyany
list<any>list<any>
tablelist<any>

Examples

Multiplies elements in the list

> [1 2 3] | each {|e| 2 * $e }
╭───┬───╮
 0 2
 1 4
 2 6
╰───┴───╯

Produce a list of values in the record, converted to string

> {major:2, minor:1, patch:4} | values | each {|| into string }
╭───┬───╮
 0 2
 1 1
 2 4
╰───┴───╯

Produce a list that has "two" for each 2 in the input

> [1 2 3 2] | each {|e| if $e == 2 { "two" } }
╭───┬─────╮
 0 two
 1 two
╰───┴─────╯

Iterate over each element, producing a list showing indexes of any 2s

> [1 2 3] | enumerate | each {|e| if $e.item == 2 { $"found 2 at ($e.index)!"} }
╭───┬───────────────╮
 0 found 2 at 1!
╰───┴───────────────╯

Iterate over each element, keeping null results

> [1 2 3] | each --keep-empty {|e| if $e == 2 { "found 2!"} }
╭───┬──────────╮
 0
 1 found 2!
 2
╰───┴──────────╯

Notes

Since tables are lists of records, passing a table into 'each' will iterate over each record, not necessarily each cell within it.

Avoid passing single records to this command. Since a record is a one-row structure, 'each' will only run once, behaving similar to 'do'. To iterate over a record's values, try converting it to a table with 'transpose' first.

Subcommands:

nametypeusage
each whileBuiltinRun a block on each row of the input list until a null is found, then create a new list with the results.