Скажем, у меня есть список (1 3 4)
и после 1
Я хочу вставить еще один элемент 2
, в результате чего (1 2 3 4)
.Как вставить элемент между другими элементами в списке KDB/Q
Как это можно эффективно сделать общим способом?
Скажем, у меня есть список (1 3 4)
и после 1
Я хочу вставить еще один элемент 2
, в результате чего (1 2 3 4)
.Как вставить элемент между другими элементами в списке KDB/Q
Как это можно эффективно сделать общим способом?
Я думаю, вы должны быть более конкретными о том, что вы хотите, но сейчас вот пример того, как можно достичь этого
q)list:1 3 4
q)list
1 3 4
q)list: asc list,:2
q)list
`s#1 2 3 4
Или другой путь, скажем, вы знаете индекс, на котором вы хотите чтобы добавить элемент в список, в данном случае с индексом 1, то вы можете создать функцию как таковую:
q)add:{[lst;ele;ind] (ind#lst),ele,(ind _ lst)}
q)list:1 3 4
q)add[list;2;1]
1 2 3 4
альтернативный подход, который позволяет несколько вставок одновременно.
Если индексы индексировать первоначальный список:
q){raze cut[(0,z);x],'(y,enlist())}[til 10;999 998 994;2 4 8]
0 1 999 2 3 998 4 5 6 7 994 8 9
Если индексы индексировать последовательные итерации списка:
q){raze cut[(0,z);x],'(y,enlist())}/[til 10;999 998 994;2 4 8]
0 1 999 2 998 3 4 5 994 6 7 8 9