Each entry in a hash table consists of a key and a value. We provide three ways to map functions over a hash table, depending on whether the function is to receive a value and return a new value, to receive a key and return a new key, or to receive a key-value pair and return a new key-value pair. The corresponding functions, applyValues, applyKeys, and applyPairs are illustrated in the next example.

The functions, scanValues, scanKeys, and scanPairs are similar, but the values returned are discarded instead of being assembled into a new hash table.

The function merge can be used to merge two hash tables. The result is a hash table whose keys are those occurring in one of the two incoming hash tables. We must provide a function of two arguments that is used to combine the values when a key occurs in both hash tables.

The function combine can be used to combine two hash tables `x` and `y` into a new hash table. Three functions must be provided. The first one produces new keys from a key of `x` and a key of `y`. The second one produces a new values from a value of `x` and a value of `y`. The third one is used to combine values when two new keys turn out to be the same.

i1 : x = new HashTable from {a=>1, b=>2} o1 = HashTable{a => 1} b => 2 o1 : HashTable |

i2 : applyValues(x, value -> 1000*value) o2 = HashTable{a => 1000} b => 2000 o2 : HashTable |

i3 : applyKeys(x, key -> {key}) o3 = HashTable{{a} => 1} {b} => 2 o3 : HashTable |

i4 : applyPairs(x, (key,value) -> (value,key)) o4 = HashTable{1 => a} 2 => b o4 : HashTable |

i5 : x = new HashTable from {a=>1, b=>2} o5 = HashTable{a => 1} b => 2 o5 : HashTable |

i6 : scanValues(x, print) 1 2 |

i7 : scanKeys(x, print) a b |

i8 : scanPairs(x, print) (a, 1) (b, 2) |

i9 : y = new HashTable from {b=>200, c=>300} o9 = HashTable{b => 200} c => 300 o9 : HashTable |

i10 : merge(x, y, plus) o10 = HashTable{a => 1 } b => 202 c => 300 o10 : HashTable |

i11 : combine(x,y,identity,times,plus) o11 = HashTable{(a, b) => 200} (a, c) => 300 (b, b) => 400 (b, c) => 600 o11 : HashTable |