Como desenvolvedor, é frequentemente necessário saber se um item especificado já existe numa colecção, ou encontrar todos os itens correspondentes a critérios particulares. Os métodos de colecção 4D oferecem muitas formas diferentes de procurar itens específicos.
Este artigo é parte de uma série que demonstra como manipular colecções com os métodos adicionados em 4D v16 R6. Para saber ainda mais, descarregue a nossa demonstração da base de dados, que inclui 12 exemplos diferentes para mostrar tudo o que pode fazer com os métodos de colecção!
Exemplo de base de dados: Gerir colecções
COMO encontrar artigos de uma colecção?
Agora, vejamos as diferentes formas que a 4D oferece para encontrar artigos numa colecção. Primeiro, começamos por construir uma colecção como se segue:
$col:=New collection(New object("City"; "Paris"; "Weather";1))
$col .push(New object("Cidade"; "New-York"; "Tempo";-10))
$col .push(New object("City"; "Tokyo"; "Weather";-5))
$col .push(New object("City"; "Miami"; "Weather";-15))
Usar “alguns” ou “todos” métodos
Para determinar se pelo menos um valor da sua colecção é superior a 0, pode usar o some método:
$b:=$col.some("WeatherGreaterThan0") // true
onde WeatherGreaterThan0 é um método de projecto, utilizado como chamada de retorno, como se segue:
$1.result:=$1.value.Weather>0
Agora, se quiser saber se todos os elementos da sua colecção coincidem com um teste personalizado, basta usar every:
$b:=$col.every("WeatherGreaterThan0") // falso
Note-se que o mesmo método de chamada de retorno poderia também ser utilizado para muitos outros casos, como uma espécie de método genérico.
filtrar uma colecção
Pode filtrar uma colecção de acordo com os resultados de um método de call back com o filter método.
Da mesma forma que os exemplos acima, se quiser criar uma colecção com todos os valores superiores a 0 de outra colecção:
$colNew:=$col.filter("WeatherGreaterThan0")
// [{Cidade:Paris,Weather:1},{Cidade:Miami,Weather:15}]
encontrar o primeiro elemento que corresponda a um critério
Se estiver à procura do primeiro elemento de uma colecção que corresponda a um método de projecto especificado, basta usar find como um método de call back:
$o:=$col.find("WeatherGreaterThan0") // {Cidade:Paris,Weather:1}
Da mesma forma, se estiver a pesquisar o índice e não o elemento em si, utilize findIndex:
$index:=$
col .findIndex("WeatherGreaterThan0")
// $i=0 (primeiro índice de colecção)
Obter índice de um elemento pesquisado
Finalmente, pode utilizar o indexOf e lastIndexOf métodos para procurar uma expressão entre os elementos da colecção e devolver o índice da primeira/última ocorrência encontrada:
$col2:=New collection(1;2; "Henry"; "Albert"; "Henry";6;4; "Henry";5)
$i :=$col2.indexOf("Henry") //$i=2 index of the first occurrence
$i :=$col2.lastIndexOf("Henry") //$i=7 index of the last occurrence