Оригинал на GitHub
Вопрос
Есть функция listUniq
, но она возвращает уникальные значения, даже если это значение было неуникальным:
=: listUniq(list: $list)
list: listCreate(item: "Alex"; item: "Sam"; item: "Alex")
Результат: ["Alex","Sam"]
Моя задача состоит в том, чтобы вернуть список уникальных значений, но если это значение неуникально, то его нужно удалить.
То есть, если взять пример из документации, по моей задаче код должен вернуть только ["Sam"]
, так как "Alex"
— неуникальное значение в списке.
Ответ
Для решения этой задачи необходимо обработать список при помощи listReplace, добавив в него колонку с количеством вхождений каждого элемента в список.
Для этого мы передаем в listReplace список уникальных значений полученный через listUniq и на каждом шаге listReplace фильтруем исходный список по значению в текущем шаге и записываем количество входжений в колонку count.
Далее фильтруем получившийся rowlist по колонке count где значения в ней равны 1 и берем из отфильтрованного rowlist колонку value:
=: $filter[[value]]
filter: listFilter(list: $replace; key: "count" = 1)
replace: listReplace(list: $rowlist; action: "count" = $count; value: "value")
rowlist: rowListCreate(field: "value" = $uniq)
uniq: listUniq(list: $list)
~list: listCreate(item: "Alex"; item: "Sam"; item: "Alex"; item: "John")
count: listCount(list: $inner_filter)
inner_filter: listFilter(list: $list; key: "value" = $#value[value])