KDB: Как мне выполнить минус в 2 списках - PullRequest
0 голосов
/ 05 октября 2018

Ввод:

a: 1 2 3 4 5 
b: 5 2 6 7

Какую операцию нужно выполнить, чтобы удалить все элементы b в a?

Ожидаемый результат:

1 3 4

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Я думаю, что ключевое слово, которое вы ищете, это except, вот так:

q)c: a except b
q)c
    1 3 4

Except возвращает все элементы левого аргумента, которые отсутствуют в правом аргументе.

0 голосов
/ 05 октября 2018

Ключевое слово except - это ответ, упомянутый другими.Кроме того, стоит потратить время на изучение того, что на самом деле делает except под прикрытием, поскольку это часто помогает лучше понять, как работает kdb / q в целом.Осматривая except, вы можете увидеть

q)except
k){x@&~x in y}

, что переводит в kdb / q в

q)a where not a in b
1 3 4

Опять же, вы все равно должны использовать except, но знать, как это достигается, полезно

0 голосов
/ 05 октября 2018

Функция except удалит элементы из одного списка из другого.

q) a except b
1 3 4

Надеюсь, это поможет.

...