Org has three predefined Emacs Lisp functions for lookups in tables.

- ‘
`(org-lookup-first VAL S-LIST R-LIST &optional PREDICATE)`’ ¶ Searches for the first element

`S`in list`S-LIST`for which(PREDICATE VAL S)

is non-

`nil`

; returns the value from the corresponding position in list`R-LIST`. The default`PREDICATE`is`equal`

. Note that the parameters`VAL`and`S`are passed to`PREDICATE`in the same order as the corresponding parameters are in the call to`org-lookup-first`

, where`VAL`precedes`S-LIST`. If`R-LIST`is`nil`

, the matching element`S`of`S-LIST`is returned.- ‘
`(org-lookup-last VAL S-LIST R-LIST &optional PREDICATE)`’ ¶ Similar to

`org-lookup-first`

above, but searches for the*last*element for which`PREDICATE`is non-`nil`

.- ‘
`(org-lookup-all VAL S-LIST R-LIST &optional PREDICATE)`’ ¶ Similar to

`org-lookup-first`

, but searches for*all*elements for which`PREDICATE`is non-`nil`

, and returns*all*corresponding values. This function can not be used by itself in a formula, because it returns a list of values. However, powerful lookups can be built when this function is combined with other Emacs Lisp functions.

If the ranges used in these functions contain empty fields, the ‘`E`’
mode for the formula should usually be specified: otherwise empty
fields are not included in `S-LIST` and/or `R-LIST`
which can, for example, result in an incorrect mapping from an element
of `S-LIST` to the corresponding element of
`R-LIST`.

These three functions can be used to implement associative arrays, count matching cells, rank results, group data, etc. For practical examples see this tutorial on Worg.