Q Language – Table Arithmetic
In this chapter, we will learn how to operate on dictionaries and then tables. Let’s start with dictionaries −
q)d:`u`v`x`y`z! 9 18 27 36 45 / Creating a dictionary d q)/ key of this dictionary (d) is given by q)key d `u`v`x`y`z q)/and the value by q)value d 9 18 27 36 45 q)/a specific value q)d`x 27 q)d[`x] 27 q)/values can be manipulated by using the arithmetic operator +-*% as, q)45 + d[`x`y] 72 81
If one needs to amend the dictionary values, then the amend formulation can be −
q)@[`d;`z;*;9] `d q)d u | 9 v | 18 x | 27 y | 36 q)/Example, table tab q)tab:([]sym:`;time:0#0nt;price:0n;size:0N) q)n:10;sym:`IBM`SAMSUNG`APPLE`MSFT q)insert[`tab;(n?sym;("t"$.z.Z);n?100.0;n?100)] 0 1 2 3 4 5 6 7 8 9 q)`time xasc `tab `tab q)/ to get particular column from table tab q)tab[`size] 12 10 1 90 73 90 43 90 84 63 q)tab[`size]+9 21 19 10 99 82 99 52 99 93 72 z | 405 q)/Example table tab q)tab:([]sym:`;time:0#0nt;price:0n;size:0N) q)n:10;sym:`IBM`SAMSUNG`APPLE`MSFT q)insert[`tab;(n?sym;("t"$.z.Z);n?100.0;n?100)] 0 1 2 3 4 5 6 7 8 9 q)`time xasc `tab `tab q)/ to get particular column from table tab q)tab[`size] 12 10 1 90 73 90 43 90 84 63 q)tab[`size]+9 21 19 10 99 82 99 52 99 93 72 q)/Example table tab q)tab:([]sym:`;time:0#0nt;price:0n;size:0N) q)n:10;sym:`IBM`SAMSUNG`APPLE`MSFT q)insert[`tab;(n?sym;("t"$.z.Z);n?100.0;n?100)] 0 1 2 3 4 5 6 7 8 9 q)`time xasc `tab `tab q)/ to get particular column from table tab q)tab[`size] 12 10 1 90 73 90 43 90 84 63 q)tab[`size]+9 21 19 10 99 82 99 52 99 93 72 q)/We can also use the @ amend too q)@[tab;`price;-;2] sym time price size -------------------------------------------- APPLE 11:16:39.779 6.388858 12 MSFT 11:16:39.779 17.59907 10 IBM 11:16:39.779 35.5638 1 SAMSUNG 11:16:39.779 59.37452 90 APPLE 11:16:39.779 50.94808 73 SAMSUNG 11:16:39.779 67.16099 90 APPLE 11:16:39.779 20.96615 43 SAMSUNG 11:16:39.779 67.19531 90 IBM 11:16:39.779 45.07883 84 IBM 11:16:39.779 61.46716 63 q)/if the table is keyed q)tab1:`sym xkey tab[0 1 2 3 4] q)tab1 sym | time price size --------- | ---------------------------------- APPLE | 11:16:39.779 8.388858 12 MSFT | 11:16:39.779 19.59907 10 IBM | 11:16:39.779 37.5638 1 SAMSUNG | 11:16:39.779 61.37452 90 APPLE | 11:16:39.779 52.94808 73 q)/To work on specific column, try this q){tab1[x]`size} each sym 1 90 12 10 q)(0!tab1)`size 12 10 1 90 73 q)/once we got unkeyed table, manipulation is easy q)2+ (0!tab1)`size 14 12 3 92 75