Index Container (#idx)

Indexes are balanced skip listss of key/value pairs. There may be more than one value for a key but there may not be two identifcal values for a key. Indexs are like the index of words in the back of a book. If a word appears more than once on a page, the page is listed only once. This differs from the dictionary where there is only one value for each key. A dictionary could only show the first occurrence of a word in a book.

Commentary Code Result
Commentary #idx =>idx;
'a1'=>['a']idx;
'a2'=>['a']idx;
'b1'=>['b']idx;
idx:seq %**$;
Seq[R2C3:K]
[1]Seq[R1C2:K]
*[1]String[R2C1:C]a
*[2]String[R2C2:C]a2
[2]Seq[R1C2:K]
*[1]String[R2C1:C]a
*[2]String[R2C2:C]a1
[3]Seq[R1C2:K]
*[1]String[R2C1:C]b
*[2]String[R3C2:C]b1
Commentary #idx =>idx;
'a1'=>['a']idx;
'a2'=>['a']idx;
'b1'=>['b']idx;
idx['a' 'b' 'x' 'a']%**$;
Seq[R1C4:K]
[1]Seq[R1C2:K]
*[1]String[R3C2:C]a2
*[2]String[R3C2:C]a1
[2]Seq[R1C1:K]
*[1]String[R2C2:C]b1
[3]Seq[R1C0:K]
[4]Seq[R1C2:K]
*[1]String[R3C2:C]a2
*[2]String[R3C2:C]a1
Commentary #idx =>idx;
'c1''c2''c3' =>['ck''ck''ck']idx;
'<1>'$;(idx:seq%**)$;
idx ~ (('ck''c1')('ck''c2'))
'<2>'$;(idx:seq%**)$;
<1>
Seq[R2C3:K]
[1]Seq[R1C2:K]
*[1]String[R6C2:C]ck
*[2]String[R3C2:C]c2
[2]Seq[R1C2:K]
*[1]String[R6C2:C]ck
*[2]String[R3C2:C]c3
[3]Seq[R1C2:K]
*[1]String[R6C2:C]ck
*[2]String[R3C2:C]c1
<2>
Seq[R2C1:K]
[1]Seq[R1C2:K]
*[1]String[R2C2:C]ck
*[2]String[R3C2:C]c3
Commentary #idx =>idx;
'c1''c2' =>['ck''ck']idx;
'dv'=>['dk1''dk2']idx;
'<1>'$;(idx:seq%**)$;
idx ~'ck';
'<2>'$;(idx:seq%**)$;
<1>
Seq[R2C4:K]
[1]Seq[R1C2:K]
*[1]String[R4C2:C]ck
*[2]String[R2C2:C]c2
[2]Seq[R1C2:K]
*[1]String[R4C2:C]ck
*[2]String[R2C2:C]c1
[3]Seq[R1C2:K]
*[1]String[R2C3:C]dk1
*[2]String[R5C2:C]dv
[4]Seq[R1C2:K]
*[1]String[R2C3:C]dk2
*[2]String[R5C2:C]dv
<2>
Seq[R2C2:K]
[1]Seq[R1C2:K]
*[1]String[R2C3:C]dk1
*[2]String[R5C2:C]dv
[2]Seq[R1C2:K]
*[1]String[R2C3:C]dk2
*[2]String[R5C2:C]dv
Commentary #idx =>idx;
'c1''c2''c3' =>['ck''ck''ck']idx;
'dv'=>['dk1''dk2']idx;
'ck'=>['dk3']idx;
'<1>'$;(idx:seq%**)$;
idx ~('dk1''dv');
idx ~('dk3''ck'>);
'<2>'$;(idx:seq%**)$;
<1>
Seq[R2C6:K]
[1]Seq[R1C2:K]
*[1]String[R6C2:C]ck
*[2]String[R2C2:C]c2
[2]Seq[R1C2:K]
*[1]String[R6C2:C]ck
*[2]String[R2C2:C]c3
[3]Seq[R1C2:K]
*[1]String[R6C2:C]ck
*[2]String[R2C2:C]c1
[4]Seq[R1C2:K]
*[1]String[R2C3:C]dk1
*[2]String[R4C2:C]dv
[5]Seq[R1C2:K]
*[1]String[R2C3:C]dk2
*[2]String[R4C2:C]dv
[6]Seq[R1C2:K]
*[1]String[R2C3:C]dk3
*[2]String[R3C2:C]ck
<2>
Seq[R2C4:K]
[1]Seq[R1C2:K]
*[1]String[R6C2:C]ck
*[2]String[R2C2:C]c2
[2]Seq[R1C2:K]
*[1]String[R6C2:C]ck
*[2]String[R2C2:C]c3
[3]Seq[R1C2:K]
*[1]String[R6C2:C]ck
*[2]String[R2C2:C]c1
[4]Seq[R1C2:K]
*[1]String[R2C3:C]dk2
*[2]String[R2C2:C]dv