Looplex Knowledge Base
GroupBy
O tube groupBy recebe um vetor do tipo Struct e agrupa os elementos deste vetor de acordo com algum de seus fields.
Formato:
|vect|.groupBy("fieldAlias")
Parâmetros:
- vect: Vetor do tipo objeto a ser agrupado.
- fieldAlias: Alias do field interno a ser usado como chave de agrupamento.
Retorno:
Um vetor de Struct. Essa struct tem dois fields específicos: uma String [key] que guarda o valor do field agrupador e um vetor de estrutura |values|, cuja estrutura corresponde à estrutura do vetor inicial.
Exemplos:
Neste exemplo, declaramos uma estrutura STR_Parte, que é usada por um vetor de estrutura de qualificação das partes. Em seguida, atribuímos o retorno do groupBy a um vetor oculto |vetorAgrupado|. Dessa forma, o template realiza o print das partes agrupadas por Estado de domicílio.
Note que o |vetorAgrupado| tem fields específicos: uma String [key] e um vetor de objetos |values| que deve utilizar a mesma estrutura do vetor sendo passado como argumento do tube groupBy.
declarations { struct[STR_Parte] { name = "Partes" fields { +[nome] : String { name = "Nome" }, +[uf] : List[*Uf] { name = "Estado de domicílio" atomic = true } } }, +|vectPartes| : Vector[STR_Parte], -|vetorAgrupado| : Vector[Struct] { fields { +[key]:String, +|values| : Vector[STR_Parte] } }} operations { |vetorAgrupado| = |vectPartes|.groupBy("uf"), foreach(<i> IN |vetorAgrupado|) { foreach(<j> IN |i.values|) { print "Nome: " & <j.nome> & "\b", print "Uf: " & <j.uf> & "\b\b" } }}