Удалить значения массива в pgSQL

По определению WeakSet имеет только три ключевые функции

  • Слабо связать объект с множеством
  • Удалить ссылку на объект из набора
  • Проверьте, был ли объект уже привязан к набору

Звучит более знакомо?

В некоторых приложениях разработчикам, возможно, потребуется реализовать быстрый способ для повторения серии данных, которая загрязнена партиями и множеством избыточности , но вы хотите выбрать только те, которые не были обработаны до (уникальные) . WeakSet может вам помочь. Пример ниже:

var processedBag = new WeakSet();
var nextObject = getNext();
while (nextObject !== null){
    // Check if already processed this similar object?
    if (!processedBag.has(nextObject)){
        // If not, process it and memorize 
        process(nextObject);
        processedBag.add(nextObject);
    }
    nextObject = getNext();
}

Одна из лучших структур данных для приложения выше - фильтр Bloom, который очень хорош для массивного размера данных. Однако для этой цели вы также можете использовать использование WeakSet.

29
задан skaffman 15 January 2010 в 15:55
поделиться

2 ответа

Нет, я не думаю, что сможешь. По крайней мере, не писать что-то уродливое вроде:

SELECT ARRAY (
 SELECT UNNEST(yourarray) LIMIT (
  SELECT array_upper(yourarray, 1) - 1
 )
)
10
ответ дан 28 November 2019 в 00:36
поделиться

Я не уверен в вашем контексте, но это должно дать вам что-то работать с:

CREATE TABLE test (x INT[]);
INSERT INTO test VALUES ('{1,2,3,4,5}');

SELECT x AS array_pre_pop,
       x[array_lower(x,1) : array_upper(x,1)-1] AS array_post_pop, 
       x[array_upper(x,1)] AS popped_value 
FROM test;


 array_pre_pop | array_post_pop | popped_value 
---------------+----------------+--------------
 {1,2,3,4,5}   | {1,2,3,4}      |            5
9
ответ дан 28 November 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: