Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode 23: Mesclando K Listas Ordenadas com Harbour/xBase e Reutilização de Código

_Créditos das imagens: ChatGPT **Título:** LeetCode 23: Mesclando K Listas Ordenadas com Harbour/xBase e Reutilização de Código **Introdução** Olá, entusiastas de Harbour/xBase e desafios de programação! Depois de explorarmos como mesclar duas listas ordenadas no [nosso post sobre o LeetCode 21](https://www.blacktdn.com.br/2025/03/blacktdn-leetcode-21-merge-two-sorted.html), vamos dar um passo adiante e enfrentar um problema um pouco mais complexo: o LeetCode 23 - Merge K Sorted Lists. Neste artigo, vamos desvendar uma implementação em Harbour/xBase para este desafio, demonstrando como podemos inteligentemente reutilizar a solução que já construímos para o problema 21. Veremos como a modularidade e a construção sobre soluções anteriores podem simplificar problemas mais complexos. **O Problema: LeetCode 23 - Merge K Sorted Lists** O desafio é o seguinte: dado um array (`aLists` em nossa implementação) contendo `k` listas encadeadas, onde cada lista já está ordenada em ordem cres...

Protheus :: Advpl :: Dicas do Robson :: Usando UniqueKey() para filtrar registros

Função: UniqueKey( <uFields> , <cAlias>, <lResetKeys>, <nMaxRec> )

Objetivo: Verificar se a chave passada é única de acordo com o campo ou campos passados nos parâmetros. Esta função ajuda a apresentar um único registro quando houver vários semelhantes, por exemplo: Fazer consulta SXB na tabela SC7, porém apresentando um registro por pedido de compra independente de quantos itens existam.

Parâmetros:

uFields – String contendo o campo ou Array  unidimensional com as strings dos campos que que serão considerados para pesquisa da chave única.

cAlias – Alias do arquivo para pesquisa.

lResetKeys – Reinicializa as chaves.

nMaxRec – Número máximo de elementos.

Essa mesma dica poderá, por extensão, servir ao fitro do MPSDU/APSDU como abaixo:

!Deleted().and.C7_EMISSAO>=FirstDate(Date()).and.C7_EMISSAO<=LastDate(Date()).and. UniqueKey({"C7_FILIAL","C7_NUM"})

Irá retornar todos os primeiros n registros da tabela SC7, não deletados, com a data de emissão dentro do mês corrente.

Dada a característica da Função UniqueKey() o intervalo de dados não poderá ser muito grande por dois motivos

  • Performance;
  • Tamanho máximo da “Pilha” de armazenamento;

Logo, para tabela com muitos registros, uma condição complementar deverá ser utilizada como filtro “primário” e excludente.

Exemplo:

image

Filtrando com:

!Deleted().and.C7_EMISSAO>=FirstDate(Date()).and.C7_EMISSAO<=LastDate(Date()).and. UniqueKey({"C7_FILIAL","C7_NUM"})

teremos:

image

image 

Uma outra dica, para melhorar a performance do filtro usando UniqueKey() é selecionar uma Chave de índice que corresponda ao filtro desejado. No nosso caso C7_FILIAL+C7_NUM…

E, como bem dito pelo Robson, além de podermos utilizar UniqueKey() para Filtrar informações via MPSDU/APSDU podemos utilizá-la para filtrar uma Consulta Padrão.
 
Observe:
 
Sem o Filtro
 
image
 
image
 
 
Aplicando o Filtro:
 
C7_EMISSAO>=FirstYDate(Date()).and.C7_EMISSAO<=LastYDate(Date()).and. UniqueKey({"C7_FILIAL","C7_NUM"})
 
 
image
 
image
 
Obteremos apenas os n Primeiros registros que atendam a condição.
 
p/ Robson Luiz (feat иαldσ dj)
 
[]s

Comentários

Postar um comentário

Postagens mais visitadas