Elektra  0.9.3
Arrays

The main building block of Elektra’s database are hierarchical key-value pairs. You can create such a pair using `kdb set`:

kdb set user/tests/parent value
#> Create a new key user/tests/parent with string "value"

. The command above created a key user/tests/parent with the value value. Since Elektra uses a hierarchical database we can also create keys below user/tests/parent:

# If we do not provide a value, then `kdb set` creates keys with `null` values.
kdb set user/tests/parent/son
#> Create a new key user/tests/parent/son with null value
kdb set user/tests/parent/daughter
#> Create a new key user/tests/parent/daughter with null value
kdb set user/tests/parent/daughter/grandchild
#> Create a new key user/tests/parent/daughter/grandchild with null value

. We can check the hierarchy of the keys using kdb ls and retrieve data using kdb get:

# Elektra sorts keys alphabetically
kdb ls user/tests/parent
#> user/tests/parent
#> user/tests/parent/daughter
#> user/tests/parent/daughter/grandchild
#> user/tests/parent/son
kdb get user/tests/parent
#> value
kdb get user/tests/parent/daughter
#>

Since Elektra sorts keys alphabetically we can use the key-value pair structure described above to store sequences of values (aka. arrays).

For an empty array ([]) we just add the metakey array:

`` @section autotoc_md2779 Create an empty array with the nameuser/tests/sequence` kdb meta-set user/tests/sequence array ''

.
### Array Elements
To create an **array element** we start the basename of a key with the `#` character and add the index of the array element afterwards. For example, the commands below adds three elements to our array `user/tests/sequence`:

kdb set user/tests/sequence/#0 'First Element' kdb set user/tests/sequence/#1 'Second Element'

Arrays do not need to be contiguous

kdb set user/tests/sequence/#3 'Fourth Element'

. As you can see above arrays can contain “empty fields”: The key `user/tests/sequence/#2` is missing.
For array elements with an index larger than `9` we must add **underscores** (`_`) to the basename, so we do not destroy the alphabetic order of the array. For example, to add a eleventh element to our array we use the following command:

kdb set user/tests/sequence/#_10 'Eleventh Element'

. The order of the array sequence is still correct afterwards, as the following command shows:

List all array elements

kdb ls user/tests/sequence/ #> user/tests/sequence/#0 #> user/tests/sequence/#1 #> user/tests/sequence/#3 #> user/tests/sequence/#_10

. For larger indices we add **one underscore less, than the number of digits** of the index. For example, to add a element with index `1337` (`4` digits) we use the basename `#___1337`. We can also generate the basename programmatically:
```bash
ruby -e 'print("#", "_" * (ARGV[0].length - 1), ARGV[0])' 12345
#> #____12345
ruby -e 'print("#", "_" * (ARGV[0].length - 1), ARGV[0])' 0
#> #0
ruby -e 'print("#", "_" * (ARGV[0].length - 1), ARGV[0])' 42
#> #_42