Apply a list of parameters to a list of input

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

 

q)b@'(0;2;1) 1 76 12

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