Wavelength Keys, Element Values
When you see orange in a flame test, you’re detecting sodium at 589 nanometers. Green is barium at 524 nm, red-violet is potassium at 766 nm. Flame emission spectroscopy turns chemistry into a lookup table: measure the wavelength, check the reference, identify the element.
Hash tables solve the same problem for arbitrary data. Here’s a spectral reference in Elixir:
spectrum = %{589 => "Sodium", 670 => "Lithium", 422 => "Calcium",
766 => "Potassium", 460 => "Strontium"}
detect = fn wavelength ->
Map.get(spectrum, wavelength, "Unknown element")
end
IO.puts detect.(589) # Sodium
IO.puts detect.(422) # Calcium
IO.puts detect.(500) # Unknown element
The same idea in Bash (version 4.0+ required):
declare -A spectrum=(
[589]="Sodium" [670]="Lithium" [422]="Calcium"
[766]="Potassium" [460]="Strontium"
)
detect() {
echo "${spectrum[$1]:-Unknown element}"
}
detect 589 # Sodium
detect 422 # Calcium
detect 500 # Unknown element
Both map keys (wavelengths in nanometers) to values (element names). Associative arrays emerged in SNOBOL4 (1962), became standard in AWK (1977), and spread through Perl and Python. Bash added them in 4.0 (2009), late to the party but using the same O(1) lookup pattern.
Real spectroscopy databases hold thousands of lines per element—sodium alone has a doublet at 589.0 and 589.6 nm, plus dozens of weaker emissions—but the principle stays the same. You match observed peaks against a reference table, and hash tables make that fast.