Well when the holes are not too big, then an array is still suitable.
Be aware you can create compile time variables and constants. compile time
variables are only existent at compilation time, but can be modified, and
constants are readable at compilation time as well as at runtime.
static:
var myTable = {
1: 14.cint,
2: 23.cint,
3: 4.cint
}.toTable()
`myTable` can be accessed and modified from macros and other static blocks but at runtime it doesn't exist anymore.
