Hi, I have a simple question:
I have a list b:(1 5 6;9 10 76; 43 12 11) and I would like to take the nth indexed element from each list where n is a list, for example n = (0;2;1).
So the output should be (1;76;12).
What is the easiest syntax to do it? Thanks.
Here’s one option:
q)b:(1 5 6;9 10 76; 43 12 11) q)n:(0;2;1) q){x y}'[b;n] 1 76 12
As far as I know it’s not possible without some kind of each, so here’s the same approach for a table:
q)tab:([time:10:03:54.347 10:04:05.827]price:(20.83 21.44 26.83 29.83e;88.88 88.75 83.27 823.77f);n:0 1) q)update m:{x y}'[price;n] from tab time | price n m ------------| --------------------------------- 10:03:54.347| 20.83 21.44 26.83 29.83 0 20.83e 10:04:05.827| 88.88 88.75 83.27 823.77 1 88.75
The lambda isn’t necessary here:
q)update m:price@'n from tab time | price n m ------------| --------------------------------- 10:03:54.347| 20.83 21.44 26.83 29.83 0 20.83e 10:04:05.827| 88.88 88.75 83.27 823.77 1 88.75
Not useful for the general case, but here you can forgo the explicit n column and use the virtual index column instead:
q)tab:([time:10:03:54.347 10:04:05.827]price:(20.83 21.44 26.83 29.83e;88.88 88.75 83.27 823.77f)) q)update m:price@'i from tab time | price m ------------| ------------------------------- 10:03:54.347| 20.83 21.44 26.83 29.83 20.83e 10:04:05.827| 88.88 88.75 83.27 823.77 88.75