Скажем, у меня есть список (1 3 4), и после 1 я хочу вставить еще один элемент 2, в результате чего получится (1 2 3 4).

Как это можно сделать эффективно в общем виде?

1
user3914448 18 Фев 2015 в 11:05

2 ответа

Альтернативный подход, допускающий несколько вставок одновременно.

Если индексы должны индексировать исходный список:

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
1
terrylynch 18 Фев 2015 в 17:35

Я думаю, вам нужно более конкретно указать, чего вы хотите, а пока вот пример того, как вы можете этого достичь.

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
0
kompsci 18 Фев 2015 в 13:59