Saltar al contenido principal
Versión: v19

Collection

La clase Collection gestiona variables de tipo Collection.

Una colección se inicializa con:

New collection {( ...value : any )} : Collection     crea una nueva colección vacía o precargada
New shared collection {( ...value : any )} : Collection     crea una nueva colección vacía o precargada compartida

Ejemplo

 var $colVar : Collection //creación de una variable 4D de tipo colección
$colVar:=New collection //inicialización de la colección y asignación a la variable 4D

Resumen

.average( {propertyPath : Text } ) : Real    devuelve la media aritmética (promedio) de los valores definidos en la instancia de la colección
.clear() : Collection    elimina todos los elementos de la instancia de la colección y devuelve una colección vacía
.combine( col2 : Collection {; index : Integer } ) : Collection    inserta elementos col2 al final o en la posición índice especificada en la instancia de la colección y devuelve la colección editada
.concat( value : any { ;...valueN } ) : Collection    elimina el último elemento de la colección y lo devuelve como resultado de la función
.copy() : Collection
.copy( option : Integer ) : Collection
.copy( option : Integer ; groupWithCol : Collection ) : Collection
.copy( option : Integer ; groupWithObj : Object ) : Collection
     devuelve una copia profunda de la instancia de la colección
.count( { propertyPath : Text } ) : Real    devuelve el número de elementos no nulos de la colección
.countValues( value : any {; propertyPath : Text } ) : Real    devuelve una nueva colección que contiene los elementos de la colección original con todos los elementos del parámetro valor añadidos al final
.distinct( {option : Integer} ) : Collection
.distinct( propertyPath : Text {; option : Integer } ) : Collection
    devuelve una colección que sólo contiene valores distintos (diferentes) de la colección original
.equal( collection2 : Collection {; option : Integer } ) : Boolean    compara collection con collection2
.every( methodName : Text { ;...param : any } ) : Boolean
.every( startFrom : Integer ; methodName : Text { ;...param : any } ) : Boolean
    The .every() function
.extract( propertyPath : Text { ; option : Integer } ) : Collection
.extract( propertyPath : Text ; targetPath : Text { ;...propertyPathN : Text ;... targetPathN : Text } ) : Collection
    crea y devuelve una nueva colección que contiene los valorespropertyPath extraídos de la colección original de objetos
.fill( value : any ) : Collection
.fill( value : any ; startFrom : Integer { ; end : Integer } ) : Collection
    llena la colección con el valor especificado, opcionalmente desde el índice startFrom hasta el índice end, y devuelve la colección resultante
.filter( methodName : Text { ; ...param : any } ) : Collection    The .filter() function
.find( methodName : Text { ; ...param : any } ) : any
.find( startFrom : Integer ; methodName : Text { ; ...param : any } ) : any
    The .indexOf() function
.findIndex( methodName : Text { ; ...param : any } ) : Integer
.findIndex( startFrom : Integer ; methodName : Text { ; ...param : any } ) : Integer
    The .findIndex() function
.indexOf( toSearch : expression { ; startFrom : Integer } ) : Integer     busca la expresión toSearch entre los elementos de la colección y devuelve el índice de la primera ocurrencia encontrada, o -1 si no se encontró
.indices( queryString : Text { ; ...value : any } ) : Collection     devuelve los índices, en la colección original, de los elementos de la colección de objetos que coinciden con las condiciones de búsqueda de queryString
.insert( index : Integer ; element : any ) : Collection      inserta element en la posición índice especificada en la instancia de la colección y devuelve la colección editada
.join( delimiter : Text { ; option : Integer } ) : Text     convierte todos los elementos de la colección en cadenas y los concatena utilizando el delimitador especificado cadena como separador
.lastIndexOf( toSearch : expression { ; startFrom : Integer } ) : Integer     busca la expresión toSearch entre los elementos de la colección y devuelve el índice de la última aparición
.length: Integer    devuelve el número de elementos de la colección
.map( methodName : Text { ; ...param : any } ) : Collection     crea una nueva colección basada en el resultado de la llamada al método methodName en cada elemento de la colección original
.max( { propertyPath : Text } ) : any     devuelve el elemento con el valor más alto de la colección
.min( { propertyPath : Text } ) : any     devuelve el elemento con el menor valor de la colección
.orderBy( ) : Collection
.orderBy( pathStrings : Text ) : Collection
.orderBy( pathObjects : Collection ) : Collection
.orderBy( ascOrDesc : Integer ) : Collection
    devuelve una nueva colección que contiene todos los elementos de la colección en el orden especificado
.orderByMethod( methodName : Text { ; ...extraParam : expression } ) : Collection     The .orderByMethod() function
.pop() : any     elimina el último elemento de la colección y lo devuelve como resultado de la función
.push( element : any { ;...elementN } ) : Collection     añade uno o más elemento(s) al final de la instancia de la colección y devuelve la colección editada
.query( queryString : Text ; ...value : any ) : Collection
.query( queryString : Text ; querySettings : Object ) : Collection
    devuelve todos los elementos de una colección de objetos que coinciden con las condiciones de búsqueda
.reduce( methodName : Text ) : any
.reduce( methodName : Text ; initValue : any { ; ...param : expression } ) : any
    The .reduce() function
.remove( index : Integer { ; howMany : Integer } ) : Collection     inserta element en la posición índice especificada en la instancia de la colección y devuelve la colección editada
.resize( size : Integer { ; defaultValue : any } ) : Collection     define la longitud de la colección al nuevo tamaño especificado y devuelve la colección redimensionada
.reverse( ) : Collection     devuelve una copia profunda de la colección con todos sus elementos en orden inverso
.shift() : any    elimina el primer elemento de la colección y lo devuelve como resultado de la función
.slice( startFrom : Integer { ; end : Integer } ) : Collection    devuelve una parte de una colección en una nueva colección
.some( methodName : Text { ; ...param : any } ) : Boolean
.some( startFrom : Integer ; methodName : Text { ; ...param : any } ) : Boolean
    devuelve true si al menos un elemento de la colección ha superado con éxito una prueba
.sort() : Collection
.sort( methodName : Text { ; ...extraParam : any } ) : Collection
    ordena los elementos de la colección original
.sum( { propertyPath : Text } ) : Real    devuelve la suma de todos los valores de la instancia de la colección
.unshift( value : any { ;...valueN : any } ) : Collection    inserta el valor dado al principio de la colección

Nueva colección

New collection {( ...value : any )} : Collection

ParámetrosTipoDescripción
valueNumber, Text, Date, Time, Boolean, Object, Collection, Picture, Pointer->Valor(es) de collection
ResultCollection<-Nueva colección

|

Descripción

El comando New collection crea una nueva colección vacía o precargada y devuelve su referencia.

Si no se pasa ningún parámetro, New collection crea una colección vacía y devuelve su referencia.

Debe asignar la referencia devuelta a una variable 4D del tipo Collection.

Tenga en cuenta que las instrucciones var : Collection or C_COLLECTION declaran una variable de tipo Collection pero no crea ninguna colección.

Opcionalmente, puede prellenar la nueva colección pasando uno o varios valores como parámetro(s).

De lo contrario, puede añadir o modificar elementos posteriormente por asignación. Por ejemplo:

 myCol[10]:="My new element"

Si el nuevo índice del elemento está más allá del último elemento existente de la colección, la colección se redimensiona automáticamente y a todos los nuevos elementos intermedios se les asigna un valor null.

Puede pasar cualquier número de valores de todos los tipos soportados (number, text, date, picture, pointer, object, collection...). A diferencia de los arrays, las colecciones pueden mezclar datos de diferentes tipos.

Debe prestar atención a los siguientes aspectos de la conversión:

  • Si pasa un puntero, se mantiene "tal cual"; se evalúa con el comando JSON Stringify
  • Las fechas se almacenan como fechas "aaaa-mm-dd" o de cadenas con el formato "AAAA-MM-DDTHH:mm:ss.SSSZ", según la configuración actual "fechas dentro de los objetos" de la base de datos. Al convertir las fechas 4D en texto antes de almacenarlas en la colección, por defecto el programa tiene en cuenta la zona horaria local. Puede modificar este comportamiento utilizando el selector Dates inside objects del comando SET DATABASE PARAMETER.
  • Si pasa un tiempo, se almacena como un número de milisegundos (Real).

Ejemplo 1

Quiere crear una nueva colección vacía y asignarla a una variable colección 4D:

 var $myCol : Collection
$myCol:=New collection
//$myCol=[]

Ejemplo 2

Quiere crear una colección precargada:

 var $filledColl : Collection
$filledColl:=New collection(33;"mike";"november";->myPtr;Current date)
//$filledColl=[33,"mike","november","->myPtr","2017-03-28T22:00:00.000Z"]

Ejemplo 3

Se crea una nueva colección y se añade un nuevo elemento:

 var $coll : Collection
$coll:=New collection("a";"b";"c")
//$coll=["a","b","c"]
$coll[9]:="z" //añadir un décimo elemento con valor "z"
$vcolSize:=$coll.length //10
//$coll=["a","b","c",null,null,null,null,null,null,"z"]

New shared collection

Histórico
VersiónModificaciones
v16 R6Añadidos

New shared collection {( ...value : any )} : Collection

ParámetrosTipoDescripción
valueNumber, Text, Date, Time, Boolean, Shared object, Shared collection->Valor(es) de la collection compartida
ResultCollection<-New shared collection

|

Descripción

El comando New shared collection crea una nueva colección vacía o precargada compartida y devuelve su referencia.

La adición de un elemento a esta colección utilizando el operador de asignación debe estar rodeada por la estructura Use...End use, de lo contrario se genera un error (esto no es necesario cuando se añaden elementos utilizando funciones como push() o map() porque activan automáticamente una estructura interna Use...End use). Sin embargo, es posible leer un elemento sin una estructura Use...End use.

Para más información sobre las colecciones compartidas, consulte la página Objetos y colecciones compartidos.

Si no se pasa ningún parámetro, New shared collection crea una colección compartida vacía y devuelve su referencia.

Debe asignar la referencia devuelta a una variable 4D del tipo Collection.

Tenga en cuenta que las instrucciones var : Collection or C_COLLECTION declaran una variable de tipo Collection pero no crea ninguna colección.

Opcionalmente, puede prellenar la nueva colección compartida pasando uno o varios valores como parámetro(s). De lo contrario, puede añadir o modificar elementos posteriormente por asignación notación objeto (ver ejemplo).

Si el nuevo índice del elemento está más allá del último elemento existente de la colección compartida, la colección se redimensiona automáticamente y a todos los nuevos elementos intermedios se les asigna un valor null.

Puede pasar cualquier número de valores de los siguientes tipos soportados:

  • number (real, longint...). Los valores numéricos se almacenan siempre como reales.
  • text
  • boolean
  • date
  • time (almacenado como número de milisegundos - real)
  • null
  • shared object(*)
  • shared collection(*) > Unlike standard (not shared) collections, shared collections do not support pictures, pointers, and objects or collections that are not shared.

Esta función modifica la colección original.

(*)Cuando un objeto o colección compartido se añade a una colección compartida, comparten el mismo identificador de bloqueo. Para más información sobre este punto, consulte 4D Doc Center.

Ejemplo

 $mySharedCol:=New shared collection("alpha";"omega")
Use($mySharedCol)
$mySharedCol[1]:="beta"
End use

.average()

Histórico
VersiónModificaciones
v16 R6Añadidos

.average( {propertyPath : Text } ) : Real

ParámetrosTipoDescripción
propertyPathText->Ruta de la propiedad del objeto que se utilizará para el cálculo
ResultReal, Undefined<-Media aritmética (promedio) de los valores de la colección

|

Descripción

La función .average() devuelve la media aritmética (promedio) de los valores definidos en la instancia de la colección.

Para el cálculo sólo se tienen en cuenta los elementos numéricos (se ignoran otros tipos de elementos).

Si la colección contiene objetos, pasa el parámetro propertyPath para indicar la propiedad del objeto a tener en cuenta.

.average() devuelve undefined if:

  • la colección está vacía,
  • la colección no contiene elementos numéricos,
  • propertyPath no se encuentra en la colección.

Ejemplo 1

 var $col : Collection
$col:=New collection(10;20;"Monday";True;6)
$vAvg:=$col.average() //12

Ejemplo 2

 var $col : Collection
$col:=New collection
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500))
$vAvg:=$col.average("salary") //23500

.clear()

Histórico
VersiónModificaciones
v16 R6Añadidos

.clear() : Collection

ParámetrosTipoDescripción
ResultCollection<-Colección original con todos los elementos eliminados

|

Descripción

La función .clear() elimina todos los elementos de la instancia de la colección y devuelve una colección vacía.

Esta función modifica la colección original.

Ejemplo

var $col : Collection
$col:=New collection(1;2;5)
$col.clear()
$vSize:=$col.length //$vSize=0

.combine()

Histórico
VersiónModificaciones
v16 R6Añadidos

.combine( col2 : Collection {; index : Integer } ) : Collection

ParámetrosTipoDescripción
col2Collection->Colección a combinar
indexInteger->Posición a la que se deben combinar los elementos de inserción en la colección (por defecto=length+1)
ResultCollection<-Colección original que contiene elementos combinados

|

Descripción

La función .combine() inserta elementos col2 al final o en la posición índice especificada en la instancia de la colección y devuelve la colección editada. .

Esta función modifica la colección original.

Por defecto, los elementos col2 se añaden al final de la colección original. Puede pasar en index la posición en la que quiere que se inserten los elementos col2 en la colección.

Esta función no modifica la colección original.

  • Si índice > la longitud de la colección, el índice inicial real se fijará en la longitud de la colección.
  • Si índice < 0, se recalcula como index:=index+length (se considera el desplazamiento desde el final de la colección).
  • Si el valor calculado es negativo, index toma el valor 0.

Ejemplo

var $c; $fruits : Collection
$c:=New collection(1;2;3;4;5;6)
$fruits:=New collection("Orange";"Banana";"Apple";"Grape")
$c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6]

.concat()

Histórico
VersiónModificaciones
v16 R6Añadidos

.concat( value : any { ;...valueN } ) : Collection

ParámetrosTipoDescripción
valueNumber, Text, Object, Collection, Date, Time, Boolean, Picture->Valores a concatenar. Si value es una colección, todos los elementos de la colección se añaden a la colección original
ResultCollection<-Nueva colección con valor(es) añadido(s) a la colección original

|

Descripción

La función .pop() elimina el último elemento de la colección y lo devuelve como resultado de la función.

Esta función no modifica la colección original.

Si value es una colección, todos sus elementos se añaden al final de la colección original. Si value no es una colección, se añade ella misma como un nuevo elemento.

Ejemplo

var $c : Collection
$c:=New collection(1;2;3;4;5)
$fruits:=New collection("Orange";"Banana";"Apple";"Grape")
$fruits.push(New object("Intruder";"Tomato"))
$c2:=$c.concat($fruits) //[1,2,3,4,5,"Orange","Banana","Apple","Grape",{"Intruder":"Tomato"}]
$c2:=$c.concat(6;7;8) //[1,2,3,4,5,6,7,8]

.copy()

Histórico
VersiónModificaciones
v18 R3Nueva opción ck shared. Nuevos parámetros groupWith
v16 R6Añadidos

.copy() : Collection
.copy( option : Integer ) : Collection
.copy( option : Integer ; groupWithCol : Collection ) : Collection
.copy( option : Integer ; groupWithObj : Object ) : Collection

ParámetrosTipoDescripción
optionInteger->ck resolve pointers: resolver punteros antes de copiar,
ck shared: devolver una colección compartida
groupWithColCollection->Colección compartida que se agrupa con la colección resultante
groupWithObjObject->Objeto compartido que se agrupa con la colección resultante
ResultCollection<-Copia profunda de la colección original

|

Descripción

La función .copy() devuelve una copia profunda de la instancia de la colección.Deep copy significa que los objetos o colecciones dentro de la colección original se duplican y no comparten ninguna referencia con la colección devuelta.

Esta función no modifica la colección original.

Si se pasa, el parámetro opción puede contener una de las siguientes constantes (o ambas):

optionDescripción
ck resolve pointersSi la colección original contiene valores de tipo puntero, por defecto la copia también contiene los punteros. Sin embargo, puede resolver punteros al copiar pasando la constante ck resolve pointers. En este caso, cada puntero presente en la colección se evalúa al copiar y se utiliza su valor desreferenciado.
ck sharedPor defecto, copy() devuelve una colección normal (no compartida), incluso si el comando se aplica a una colección compartida. Pase la constante ck shared para crear una colección compartida. En este caso, puede utilizar el parámetro groupWith para asociar la colección compartida a otra colección u objeto (ver abajo).

Los parámetros groupWithCol o groupWithObj permiten designar una colección o un objeto al que se debe asociar la colección resultante.

nota

Los objetos Datastore, dataclass y entity no son copiables. Si se llama a .copy() con ellos, se devuelven valores null.

Ejemplo 1

Queremos copiar la colección regular (no compartida) $lastnames en el objeto compartido $sharedObject. Para ello, debemos crear una copia compartida de la colección ($sharedLastnames).

var $sharedObject : Object
var $lastnames;$sharedLastnames : Collection
var $text : Text

$sharedObject:=New shared object

$text:=Document to text(Get 4D folder(Current resources folder)+"lastnames.txt")
$lastnames:=JSON Parse($text) //$lastnames es una colección estándar

$sharedLastnames:=$lastnames.copy(ck shared) //$sharedLastnames es una colección compartida

//Now we can put $sharedLastnames into $sharedObject
Use($sharedObject)
$sharedObject.lastnames:=$sharedLastnames
End use

Ejemplo 2

Queremos combinar $sharedColl1 and $sharedColl2. Dado que pertenecen a diferentes grupos compartidos, una combinación directa daría lugar a un error. Por lo tanto, debemos hacer una copia compartida de $sharedColl1 y designar $sharedColl2 como grupo compartido para la copia.

var $sharedColl1;$sharedColl2;$copyColl : Collection

$sharedColl1:=New shared collection(New shared object("lastname";"Smith"))
$sharedColl2:=New shared collection(New shared object("lastname";"Brown"))

//$copyColl pertenece al mismo grupo compartido que $sharedColl2
$copyColl:=$sharedColl1.copy(ck shared;$sharedColl2)
Use($sharedColl2)
$sharedColl2.combine($copyColl)
End use

Ejemplo 3

Tenemos una colección Clásica ($lastnames) y queremos ponerla en el Storage de la aplicación. Para ello, debemos crear previamente una copia compartida ($sharedLastnames).

var $lastnames;$sharedLastnames : Collection
var $text : Text

$text:=Document to text(Get 4D folder(Current resources folder)+"lastnames.txt")
$lastnames:=JSON Parse($text) //$lastnames es una colección clásica

$sharedLastnames:=$lastnames.copy(ck shared) // copia compartida

Use(Storage)
Storage.lastnames:=$sharedLastnames
End use

Ejemplo 4

Este ejemplo ilustra el uso de la opción ck resolve pointers:

 var $col : Collection
var $p : Pointer
$p:=->$what

$col:=New collection
$col.push(New object("alpha";"Hello";"num";1))
$col.push(New object("beta";"You";"what";$p))

$col2:=$col.copy()
$col2[1].beta:="World!"
ALERT($col[0].alpha+" "+$col2[1].beta) //displays "Hello World!"

$what:="You!"
$col3:=$col2.copy(ck resolve pointers)
ALERT($col3[0].alpha+" "+$col3[1].what) //displays "Hello You!"
ALERT($col[0].alpha+" "+$col2[1].beta) //muestra "Hello World!"

$what:="You!"
$col3:=$col2.copy(ck resolve pointers)
ALERT($col3[0].alpha+" "+$col3[1].what) //muestra "Hello You!"

.count()

Histórico
VersiónModificaciones
v16 R6Añadidos

.count( { propertyPath : Text } ) : Real

ParámetrosTipoDescripción
propertyPathText->Ruta de la propiedad del objeto que se utilizará para el cálculo
ResultReal<-Número de elementos en la colección

|

Descripción

La función .push() devuelve el número de elementos no nulos de la colección.

Si la colección contiene objetos, se puede pasar el parámetro propertyPath. En este caso, sólo se tienen en cuenta los elementos que contienen la propertyPath.

Ejemplo

 var $col : Collection
var $count1;$count2 : Real
$col:=New collection(20;30;Null;40)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500))
$col.push(New object("lastName";"Henry";"salary";12000))
$count1:=$col.count() //$count1=7
$count2:=$col.count("name") //$count2=3

.countValues()

Histórico
VersiónModificaciones
v16 R6Añadidos

.countValues( value : any {; propertyPath : Text } ) : Real

ParámetrosTipoDescripción
valueText, Number, Boolean, Date, Object, Collection->Valor a contar
propertyPathText->Ruta de la propiedad del objeto que se utilizará para el cálculo
ResultReal<-Número de ocurrencias del valor

|

Descripción

La función .concat() devuelve una nueva colección que contiene los elementos de la colección original con todos los elementos del parámetro valor añadidos al final.

Puede pasar en value:

  • un valor escalar (texto, número, booleano, fecha),
  • una referencia de objeto o de colección.

Para encontrar un elemento, el tipo de value debe ser equivalente al tipo del elemento; el método utiliza el operador de igualdad.

El parámetro opcional propertyPath permite contar valores dentro de una colección de objetos: pase en propertyPath la ruta de la propiedad cuyos valores quiere contar.

Esta función no modifica la colección original.

Ejemplo 1

 var $col : Collection
var $vCount : Integer
$col:=New collection(1;2;5;5;5;3;6;4)
$vCount:=$col.countValues(5) // $vCount=3

Ejemplo 2

 var $col : Collection
var $vCount : Integer
$col:=New collection
$col.push(New object("name";"Smith";"age";5))
$col.push(New object("name";"Wesson";"age";2))
$col.push(New object("name";"Jones";"age";3))
$col.push(New object("name";"Henry";"age";4))
$col.push(New object("name";"Gross";"age";5))
$vCount:=$col.countValues(5;"age") //$vCount=2

Ejemplo 3

 var $numbers; $letters : Collection
var $vCount : Integer

$letters:=New collection("a";"b";"c")
$numbers:=New collection(1;2;$letters;3;4;5)

$vCount:=$numbers.countValues($letters) //$vCount=1

.distinct()

Histórico
VersiónModificaciones
v16 R6Añadidos

.distinct( {option : Integer} ) : Collection
.distinct( propertyPath : Text {; option : Integer } ) : Collection

ParámetrosTipoDescripción
optionInteger->ck diacritical: evaluación diacrítica ("A" # "a" por ejemplo)
propertyPathText->Ruta del atributo cuyos valores distintos desea obtener
ResultCollection<-Nueva colección con sólo valores distintos

|

Descripción

La función .distinct() devuelve una colección que sólo contiene valores distintos (diferentes) de la colección original.

Esta función no modifica la colección original.

La colección devuelta se clasifica automáticamente. Los valores Null no se devuelven.

Por defecto, se realiza una evaluación no diacrítica. Si desea que la evaluación distinga entre mayúsculas y minúsculas o que diferencie los caracteres acentuados, pase la constante ck diacritical en el parámetro option.

Si la colección contiene objetos, puede pasar el parámetro propertyPath para indicar la propiedad del objeto cuyos valores distintos desea obtener.

Ejemplo

 var $c; $c2 : Collection
$c:=New collection
$c.push("a";"b";"c";"A";"B";"c";"b";"b")
$c.push(New object("size";1))
$c.push(New object("size";3))
$c.push(New object("size";1))
$c2:=$c.distinct() //$c2=["a","b","c",{"size":1},{"size":3},{"size":1}]
$c2:=$c.distinct(ck diacritical) //$c2=["a","A","b","B","c",{"size":1},{"size":3},{"size":1}]
$c2:=$c.distinct("size") //$c2=[1,3]

.equal()

Histórico
VersiónModificaciones
v16 R6Añadidos

.equal( collection2 : Collection {; option : Integer } ) : Boolean

ParámetrosTipoDescripción
collection2Collection->Colección a comparar
optionInteger->ck diacritical: evaluación diacrítica ("A" # "a" por ejemplo)
ResultBoolean<-True si las colecciones son idénticas, false en caso contrario

|

Descripción

La función .equal() compara collection con collection2 y devuelve true si son idénticos (deep comparison).

Por defecto, se realiza una evaluación no diacrítica. Si desea que la evaluación diferencie entre mayúsculas y minúsculas o que diferencie los caracteres acentuados, pase la constante ck diacritical en el parámetro option.

Esta función no modifica la colección original.

Ejemplo

 var $c; $c2 : Collection
var $b : Boolean

$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"orange");2;3;4)
$b:=$c.equal($c2) // false

$c:=New collection(New object("1";"a";"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"orange");2;3)
$b:=$c.equal($c2) // false

$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"ORange");2;3)
$b:=$c.equal($c2) // true

$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"ORange");2;3)
$b:=$c.equal($c2;ck diacritical) //false

.every()

Histórico
VersiónModificaciones
v16 R6Añadidos

.every( methodName : Text { ;...param : any } ) : Boolean
.every( startFrom : Integer ; methodName : Text { ;...param : any } ) : Boolean

ParámetrosTipoDescripción
startFromInteger->Índice para iniciar la prueba en
methodNameText->Nombre del método a llamar para la prueba
paramMixed->Parámetro(s) a pasar a methodName
ResultBoolean<-True si todos los elementos han pasado la prueba con éxito

|

Descripción

La función .every() The .every() function.

En methodName, pase el nombre del método a utilizar para evaluar los elementos de la colección, junto con su(s) parámetro(s) en param (opcional). methodName puede realizar cualquier prueba, con o sin los parámetros. Este método recibe un Objecten el primer parámetro ($1) y debe definir $1.result como true para cada elemento que cumpla la prueba.

methodName recibe los siguientes parámetros:

  • en $1.value: valor del elemento a evaluar
  • en $2: param
  • en $N...: paramN...

methodName define el(los) siguiente(s) parámetro(s):

  • >$1.result (Boolean): true si la evaluación del valor del elemento tiene éxito, si no false.
  • $1.stop (Boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

En todos los casos, en el momento en que la función .every() encuentre el primer elemento de la colección que devuelva false en $1.result, deja de llamar a methodName y devuelve false.

Por defecto, .every() comprueba toda la colección. Opcionalmente, se puede pasar en startFrom el índice del elemento desde el que iniciar la prueba.

  • Si startFrom >= la longitud de la colección, se devuelve false<, lo que significa que la colección no se prueba.
  • Si startFrom < 0, se considera el desplazamiento desde el final de la colección (startFrom:=startFrom+length).
  • Si startFrom = 0, se busca en toda la colección (por defecto).

Ejemplo 1

var $c : Collection  
var $b : Boolean
$c:=New collection
$c.push(5;3;1;4;6;2)
$b:=$c.every("NumberGreaterThan0") //devuelve true
$c.push(-1)
$b:=$c.every("NumberGreaterThan0") //devuelve false

Con lo siguiente método NumberGreaterThan0:

$1.result:=$1.value>0

Ejemplo 2

Este ejemplo comprueba que todos los elementos de una colección son de tipo real:

var $c : Collection
var $b : Boolean
$c:=New collection
$c.push(5;3;1;4;6;2)
$b:=$c.every("TypeLookUp";Is real) //$b=true
$c:=$c.push(New object("name";"Cleveland";"zc";35049))
$c:=$c.push(New object("name";"Blountsville";"zc";35031))
$b:=$c.every("TypeLookUp";Is real) //$b=false

Con lo siguiente método TypeLookUp:

#DECLARE ($toEval : Object ; $param : Integer) //$1; $2
If(Value type($toEval.value)=$param)
$toEval.result:=True
End if

.extract()

Histórico
VersiónModificaciones
v16 R6Añadidos

.extract( propertyPath : Text { ; option : Integer } ) : Collection
.extract( propertyPath : Text ; targetPath : Text { ;...propertyPathN : Text ;... targetPathN : Text } ) : Collection

ParámetrosTipoDescripción
propertyPathText->Ruta de la propiedad del objeto cuyos valores deben ser extraídos a la nueva colección
targetpathText->Ruta de la propiedad de destino o nombre de la propiedad
optionInteger->ck keep null: incluye la propiedad null en la colección devuelta (se ignora por defecto). Parámetro ignorado si se pasa targetPath.
ResultCollection<-Nueva colección que contiene los valores extraídos

|

Descripción

La función .reduce() crea y devuelve una nueva colección que contiene los valorespropertyPath extraídos de la colección original de objetos.

Esta función no modifica la colección original.

El contenido de la colección devuelta depende del parámetro targetPath:

  • Si se omite el parámetro, targetPath, .extract() rellena la nueva colección con los valores de propertyPath de la colección original.

    Por defecto, los elementos cuya propertyPath es null o indefinida se ignoran en la colección resultante. Puede pasar la constante ck keep null en el parámetro option para incluir estos valores como elementos nulos en la colección devuelta.

  • Si se pasan uno o más parámetros targetPath, .extract() rellena la nueva colección con las propiedades propertyPath y cada elemento de la nueva colección es un objeto con propiedades targetPath rellenadas con las propiedades propertyPath correspondientes. Se mantienen los valores null (el parámetro option se ignora) con esta sintaxis.

Ejemplo 1

var $c : Collection
$c:=New collection
$c.push(New object("name";"Cleveland"))
$c.push(New object("zip";5321))
$c.push(New object("name";"Blountsville"))
$c.push(42)
$c2:=$c.extract("name") // $c2=[Cleveland,Blountsville]
$c2:=$c.extract("name";ck keep null) //$c2=[Cleveland,null,Blountsville,null]

Ejemplo 2

var $c : Collection
$c:=New collection
$c.push(New object("zc";35060))
$c.push(New object("name";Null;"zc";35049))
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$c2:=$c.extract("name";"City") //$c2=[{City:null},{City:Cleveland},{City:Blountsville},{City:Adger},{City:Clanton},{City:Clanton}]
$c2:=$c.extract("name";"City";"zc";"Zip") //$c2=[{Zip:35060},{City:null,Zip:35049},{City:Cleveland,Zip:35049},{City:Blountsville,Zip:35031},{City:Adger,Zip:35006},{City:Clanton,Zip:35046},{City:Clanton,Zip:35045}]

.fill()

Histórico
VersiónModificaciones
v16 R6Añadidos

.fill( value : any ) : Collection
.fill( value : any ; startFrom : Integer { ; end : Integer } ) : Collection

ParámetrosTipoDescripción
valuenumber, Text, Collection, Object, Date, Boolean->Valor a asignar
startFromInteger->Índice de inicio (incluido)
endInteger->Índice final (no incluido)
Resultcollection<-Colección original con los valores rellenados

|

Descripción

La función .fill() llena la colección con el valor especificado, opcionalmente desde el índice startFrom hasta el índice end, y devuelve la colección resultante.

Esta función modifica la colección original.

  • Si se omite el parámetro startFrom, value se define en todos los elementos de la colección (startFrom=0).
  • Si se pasa el parámetro startFrom y se omite end, value se establece en los elementos de la colección empezando por startFrom hasta el último elemento de la colección (end=length).
  • Si se pasan ambos parámetros startFrom y end, value se establece en los elementos de la colección empezando por startFrom hasta el elemento end.

En caso de incoherencia, se aplican las siguientes reglas:

  • Si startFrom < 0, se recalcula como startFrom:=startFrom+length (se considera el desplazamiento desde el final de la colección). Si el valor calculado es negativo, startFrom toma el valor 0.
  • Si end < 0 , se recalcula como end:=end+length.
  • Si end < startFrom (valores pasados o calculados), el método no hace nada.

Ejemplo

 var $c : Collection
$c:=New collection(1;2;3;"Lemon";Null;"";4;5)
$c.fill("2") // $c:=[2,2,2,2,2,2,2,2]
$c.fill("Hello";5) // $c=[2,2,2,2,2,Hello,Hello,Hello]
$c.fill(0;1;5) // $c=[2,0,0,0,0,Hello,Hello,Hello]
$c.fill("world";1;-5) //-5+8=3 -> $c=[2,"world","world",0,0,Hello,Hello,Hello]

.filter()

Histórico
VersiónModificaciones
v16 R6Añadidos

.filter( methodName : Text { ; ...param : any } ) : Collection

ParámetrosTipoDescripción
methodNameText->Nombre de la función a la que se llama para filtrar la colección
paramMixed->Parámetro(s) a pasar a methodName
ResultCollection<-Nueva colección que contiene los elementos filtrados (copia superficial)

|

Descripción

La función .filter() The .filter() function. Esta función devuelve una copia superficial, lo que significa que los objetos o colecciones de ambas colecciones comparten la misma referencia. Si la colección original es una colección compartida, la colección devuelta es también una colección compartida.

Esta función no modifica la colección original.

En methodName, pase el nombre del método a utilizar para evaluar los elementos de la colección, junto con su(s) parámetro(s) en param (opcional). methodName puede realizar cualquier prueba, con o sin los parámetros. In methodName, pass the name of the method to use to evaluate collection elements, along with its parameter(s) in param (optional).

methodName recibe los siguientes parámetros:

  • en $1.value: valor del elemento a filtrar
  • en $2: param
  • en $N...: param2...paramN

methodName define el(los) siguiente(s) parámetro(s):

  • $1.result (boolean): true si el valor del elemento coincide con la condición del filtro y debe mantenerse.
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

Ejemplo 1

Desea obtener la colección de elementos de texto cuya longitud es inferior a 6:

 var $col;$colNew : Collection
$col:=New collection("hello";"world";"red horse";66;"tim";"san jose";"miami")
$colNew:=$col.filter("LengthLessThan";6)
//$colNew=["hello","world","tim","miami"]

El código del método LengthLessThan es:

 C_OBJECT($1)
C_LONGINT($2)
If(Value type($1.value)=Is text)
$1.result:=(Length($1.value))<$2
End if

Ejemplo 2

Quiere filtrar los elementos según su tipo de valor:

 var $c;$c2;$c3 : Collection
$c:=New collection(5;3;1;4;6;2)
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c2:=$c.filter("TypeLookUp";Is real) // $c2=[5,3,1,4,6,2]
$c3:=$c.filter("TypeLookUp";Is object)
// $c3=[{name:Cleveland,zc:35049},{name:Blountsville,zc:35031}]

El código de TypeLookUp es:

 C_OBJECT($1)
C_LONGINT($2)
If(OB Get type($1;"value")=$2)


$1.result:=True
End if

.find()

Histórico
VersiónModificaciones
v16 R6Añadidos

.find( methodName : Text { ; ...param : any } ) : any
.find( startFrom : Integer ; methodName : Text { ; ...param : any } ) : any

ParámetrosTipoDescripción
startFromInteger->Índice para iniciar la búsqueda en
methodNameText->Nombre de la función a la que se llama para la búsqueda
paramany->Parámetro(s) a pasar a methodName
Resultany<-Primer valor encontrado, o Undefined si no se encuentra

|

Descripción

La función .distinct() The .indexOf() function.

Esta función no modifica la colección original.

En methodName, pase el nombre del método a utilizar para evaluar los elementos de la colección, junto con su(s) parámetro(s) en param (opcional). methodName puede realizar cualquier prueba, con o sin los parámetros. In methodName, pass the name of the method to use to evaluate collection elements, along with its parameter(s) in param (optional).

methodName recibe los siguientes parámetros:

  • en $1.value: valor del elemento a evaluar
  • en $2: param
  • en $N...: param2...paramN

methodName define el(los) siguiente(s) parámetro(s):

  • >$1.result (boolean): true si el valor del elemento coincide con la condición de búsqueda.
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

Por defecto, .find() busca en toda la colección. Opcionalmente, se puede pasar en startFrom el índice del elemento desde el que iniciar la búsqueda.

  • Si startFrom >= la longitud de la colección, se devuelve -1, lo que significa que la colección no se busca.
  • Si startFrom < 0, se considera el desplazamiento desde el final de la colección (startFrom:=startFrom+length). Nota: incluso si startFrom es negativo, la colección se sigue buscando de izquierda a derecha.
  • Si startFrom = 0, se busca en toda la colección (por defecto).

Ejemplo 1

Quiere obtener el primer elemento con una longitud menor que 5:

 var $col : Collection
$col:=New collection("hello";"world";4;"red horse";"tim";"san jose")
$value:=$col.find("LengthLessThan";5) //$value="tim"

El código del método LengthLessThan es:

 var $1 : Object
var $2 : Integer
If(Value type($1.value)=Is text)
$1.result:=(Length($1.value))<$2
End if

Ejemplo 2

Quiere encontrar el nombre de una ciudad dentro de una colección:

 var $c : Collection
var $c2 : Object
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$c2:=$c.find("FindCity";"Clanton") //$c2={name:Clanton,zc:35046}

El código para FindCity es:

 var $1 : Object
var $2 : Text
$1.result:=$1.value.name=$2 //name es un nombre de propiedad de los objetos de la colección

.findIndex()

Histórico
VersiónModificaciones
v16 R6Añadidos

.findIndex( methodName : Text { ; ...param : any } ) : Integer
.findIndex( startFrom : Integer ; methodName : Text { ; ...param : any } ) : Integer

ParámetrosTipoDescripción
startFromInteger->Índice para iniciar la búsqueda en
methodNameText->Nombre de la función a la que se llama para la búsqueda
paramany->Parámetro(s) a pasar a methodName
ResultInteger<-Índice del primer valor encontrado, o -1 si no se encuentra

|

Descripción

La función .findIndex() The .findIndex() function.

Esta función no modifica la colección original.

En methodName, pase el nombre del método a utilizar para evaluar los elementos de la colección, junto con su(s) parámetro(s) en param (opcional). In methodName, pass the name of the method to use to evaluate collection elements, along with its parameter(s) in param (optional). methodName can perform any test, with or without the parameter(s).

methodName recibe los siguientes parámetros:

  • en $1.value: valor del elemento a evaluar
  • en $2: param
  • en $N...: param2...paramN

methodName define el(los) siguiente(s) parámetro(s):

  • >$1.result (boolean): true si el valor del elemento coincide con la condición de búsqueda.
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

Por defecto, .findIndex() busca en toda la colección. Opcionalmente, se puede pasar en startFrom el índice del elemento desde el que iniciar la búsqueda.

  • Si startFrom >= la longitud de la colección, se devuelve -1, lo que significa que la colección no se busca.
  • Si startFrom < 0, se considera el desplazamiento desde el final de la colección (startFrom:=startFrom+length). Nota: incluso si startFrom es negativo, la colección se sigue buscando de izquierda a derecha.
  • Si startFrom = 0, se busca en toda la colección (por defecto).

Ejemplo

Quiere encontrar la posición del primer nombre de ciudad dentro de una colección:

 var $c : Collection
var $val2;$val3 : Integer
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$val2:=$c.findIndex("FindCity";"Clanton") // $val2=3
$val3:=$c.findIndex($val2+1;"FindCity";"Clanton") //$val3=4

El código del método FindCity es:

 var $1 : Object
var $2 : Text
$1.result:=$1.value.name=$2

.indexOf()

Histórico
VersiónModificaciones
v16 R6Añadidos

.indexOf( toSearch : expression { ; startFrom : Integer } ) : Integer

ParámetrosTipoDescripción
toSearchexpresión->Expresión a buscar en la colección
startFromInteger->Índice para iniciar la búsqueda en
ResultInteger<-Índice de la primera ocurrencia de toSearch en la colección, -1 si no se encuentra

|

Descripción

La función .extract() busca la expresión toSearch entre los elementos de la colección y devuelve el índice de la primera ocurrencia encontrada, o -1 si no se encontró.

Esta función no modifica la colección original.

En toSearch, pase la expresión a encontrar en la colección. Puede pasar:

  • un valor escalar (texto, número, booleano, fecha),
  • el valor null,
  • una referencia de objeto o de colección.

toSearch debe coincidir exactamente con el elemento a encontrar (se aplican las mismas reglas que para el operador de igualdad del tipo de datos).

Opcionalmente, puede pasar el índice de la colección desde el que iniciar la búsqueda en startFrom.

  • Si startFrom >= la longitud de la colección, se devuelve -1, lo que significa que la colección no se busca.
  • Si startFrom < 0, se considera el desplazamiento desde el final de la colección (startFrom:=startFrom+length). Nota: incluso si startFrom es negativo, la colección se sigue buscando de izquierda a derecha.
  • Si startFrom = 0, se busca en toda la colección (por defecto).

Ejemplo

 var $col : Collection
var $i : Integer
$col:=New collection(1;2;"Henry";5;3;"Albert";6;4;"Alan";5)
$i:=$col.indexOf(3) //$i=4
$i:=$col.indexOf(5;5) //$i=9
$i:=$col.indexOf("al@") //$i=5
$i:=$col.indexOf("Hello") //$i=-1

.indices()

Histórico
VersiónModificaciones
v16 R6Añadidos

.indices( queryString : Text { ; ...value : any } ) : Collection

ParámetrosTipoDescripción
queryStringText->Criterio de búsqueda
valueany->Valor(es) a comparar cuando se utiliza(n) marcador(es) de posición
ResultCollection<-Índice(s) de elementos que coinciden con queryString en la colección

|

Descripción

La función .indices() funciona exactamente igual que la función .query() pero devuelve los índices, en la colección original, de los elementos de la colección de objetos que coinciden con las condiciones de búsqueda de queryStringy no los elementos en sí mismos. Los índices se devuelven en orden ascendente.

Esta función no modifica la colección original.

El parámetro queryString utiliza la siguiente sintaxis:

propertyPath comparator value {logicalOperator propertyPath comparator value}

Para una descripción detallada de los parámetros queryString y value, consulte la función dataClass.query().

Ejemplo

 var $c; $icol : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))

$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$icol:=$c.indices("name = :1";"Cleveland") // $icol=[0]
$icol:=$c.indices("zc > 35040") // $icol=[0,3,4]

.insert()

Histórico
VersiónModificaciones
v16 R6Añadidos

.insert( index : Integer ; element : any ) : Collection

ParámetrosTipoDescripción
indexInteger->Dónde insertar el elemento
elementany->Elemento a insertar en la colección
ResultCollection<-Colección original que contiene los elementos insertados

|

Descripción

La función .insert() inserta element en la posición índice especificada en la instancia de la colección y devuelve la colección editada.

Esta función modifica la colección original.

En index, pase la posición donde quiere que se inserte el elemento en la colección.

Esta función no modifica la colección original.

  • Si índice > la longitud de la colección, el índice inicial real se fijará en la longitud de la colección.
  • Si index <0, se recalcula como index:=index+length (se considera el desplazamiento desde el final de la colección).
  • Si el valor calculado es negativo, index toma el valor 0.

Se puede insertar cualquier tipo de elemento aceptado por una colección, incluso otra colección.

Ejemplo

 var $col : Collection
$col:=New collection("a";"b";"c";"d") //$col=["a","b","c","d"]
$col.insert(2;"X") //$col=["a","b","X","c","d"]
$col.insert(-2;"Y") //$col=["a","b","X","Y","c","d"]
$col.insert(-10;"Hi") //$col=["Hi","a","b","X","Y","c","d"]

.join()

Histórico
VersiónModificaciones
v16 R6Añadidos

.join( delimiter : Text { ; option : Integer } ) : Text

ParámetrosTipoDescripción
delimiterText->Separador a utilizar entre elementos
optionInteger->ck ignore null or empty: ignorar las cadenas nulas y vacías en el resultado
ResultText<-Cadena que contiene todos los elementos de la colección, separados por un delimitador

|

Descripción

La función .join() convierte todos los elementos de la colección en cadenas y los concatena utilizando el delimitador especificado cadena como separador. La función devuelve la cadena resultante.

Esta función no modifica la colección original.

Por defecto, los elementos nulos o vacíos de la colección se devuelven en la cadena resultante. Pase la constante ck ignore null o empty en el parámetro option si quiere eliminarlos de la cadena resultante.

Ejemplo

 var $c : Collection
var $t1;$t2 : Text
$c:=New collection(1;2;3;"Paris";Null;"";4;5)
$t1:=$c.join("|") //1|2|3|Paris|null||4|5
$t2:=$c.join("|";ck ignore null or empty) //1|2|3|Paris|4|5

.lastIndexOf()

Histórico
VersiónModificaciones
v16 R6Añadidos

.lastIndexOf( toSearch : expression { ; startFrom : Integer } ) : Integer

ParámetrosTipoDescripción
toSearchexpresión->El elemento que se va a buscar dentro de la colección
startFromInteger->Índice para iniciar la búsqueda en
ResultInteger<-Índice de la última ocurrencia de toSearch en la colección, -1 si no se encuentra

|

Descripción

La función .lastIndexOf() busca la expresión toSearch entre los elementos de la colección y devuelve el índice de la última aparicióno -1 si no se encuentra.

Esta función no modifica la colección original.

En toSearch, pase la expresión a encontrar en la colección. Puede pasar:

  • un valor escalar (texto, número, booleano, fecha),
  • el valor null,
  • una referencia de objeto o de colección.

toSearch debe coincidir exactamente con el elemento a encontrar (se aplican las mismas reglas que para el operador de igualdad).

Opcionalmente, puede pasar el índice de la colección desde el cual iniciar una búsqueda en reversa en startFrom.

  • Si startFrom >= la longitud de la colección menos uno (coll.length-1), se busca en toda la colección (por defecto).
  • Si startFrom < 0, se recalcula como startFrom:=startFrom+length (se considera el desplazamiento desde el final de la colección). Si el valor calculado es negativo, se devuelve -1 (no se busca en la colección). Nota: incluso si startFrom es negativo, la colección se sigue buscando de derecha a izquierda.
  • Si startFrom = 0, se devuelve -1 lo que significa que la colección no se busca.

Ejemplo

 var $col : Collection
var $pos1;$pos2;$pos3;$pos4;$pos5 : Integer
$col:=Split string("a,b,c,d,e,f,g,h,i,j,e,k,e";",") //$col.length=13
$pos1:=$col.lastIndexOf("e") //devuelve 12
$pos2:=$col.lastIndexOf("e";6) //devuelve 4
$pos3:=$col.lastIndexOf("e";15) //devuelve 12
$pos4:=$col.lastIndexOf("e";-2) //devuelve 10
$pos5:=$col.lastIndexOf("x") //devuelve -1

.length

Histórico
VersiónModificaciones
v16 R5Añadidos

.length: Integer

Descripción

La propiedad .length devuelve el número de elementos de la colección.

La propiedad .length se inicializa cuando se crea la colección. Añadir o eliminar elementos actualiza la longitud, si es necesario. Esta propiedad es sólo lectura (no se puede utilizar para definir el tamaño de la colección).

Ejemplo

 var $col : Collection //$col.length inicializada en 0
$col:=New collection("one";"two";"three") //$col.length actualizada a 3
$col[4]:="five" //$col.length actualizada a 5
$vSize:=$col.remove(0;3).length //$vSize=2

.map()

Histórico
VersiónModificaciones
v16 R6Añadidos

.map( methodName : Text { ; ...param : any } ) : Collection

ParámetrosTipoDescripción
methodNameText->Nombre del método utilizado para transformar los elementos de la colección
paramany->Parámetros del método
ResultCollection<-Colección de valores transformados

|

Descripción

La función .map() crea una nueva colección basada en el resultado de la llamada al método methodName en cada elemento de la colección original. Opcionalmente, puede pasar parámetros a methodName utilizando el(los) parámetro(s) param. .map() siempre devuelve una colección con el mismo tamaño que la colección original, excepto si se ha utilizado $1.stop (ver abajo).

Esta función no modifica la colección original.

En methodName, pase el nombre del método a utilizar para evaluar los elementos de la colección, junto con su(s) parámetro(s) en param (opcional). In methodName, pass the name of the method to use to evaluate collection elements, along with its parameter(s) in param (optional).

methodName recibe los siguientes parámetros:

  • en $1.value (todo tipo): valor del elemento que se va a asignar
  • en $2 (todo tipo): param
  • en $N... (any type): paramN...

methodName define el(los) siguiente(s) parámetro(s):

  • $1.result (todo tipo): nuevo valor transformado para añadir a la colección resultante
  • $1.stop (boolean): true para detener la retrollamada del método. El valor devuelto es el último calculado.

Ejemplo

 var $c; $c2 : Collection
$c:=New collection(1;4;9;10;20)
$c2:=$c.map("Percentage";$c.sum())
//$c2=[2.27,9.09,20.45,22.73,45.45]

Aqui está el método Percentage:

 var $1 : Object
var $2 : Real
$1.result:=Round(($1.value/$2)*100;2)

.max()

Histórico
VersiónModificaciones
v16 R6Añadidos

.max( { propertyPath : Text } ) : any

ParámetrosTipoDescripción
propertyPathText->Ruta de la propiedad del objeto que se utilizará para la evaluación
ResultBoolean, Text, Number, Collection, Object, Date<-Valor máximo en la colección

|

Descripción

La función .max() devuelve el elemento con el valor más alto de la colección (el último elemento de la colección tal y como se ordenaría de forma ascendente mediante la función .sort()).

Esta función no modifica la colección original.

Si la colección contiene diferentes tipos de valores, la función .max() devolverá el valor máximo dentro del último tipo de elemento en el orden de la lista de tipos (ver la descripción de .sort()).

Si la colección contiene objetos, pase el parámetro propertyPath para indicar la propiedad del objeto cuyo valor máximo desea obtener.

Si la colección está vacía, .max() devuelve Undefined.

Ejemplo

 var $col : Collection
$col:=New collection(200;150;55)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Alabama";"salary";10500))
$max:=$col.max() //{name:Alabama,salary:10500}
$maxSal:=$col.max("salary") //50000
$maxName:=$col.max("name") //"Wesson"

.min()

Histórico
VersiónModificaciones
v16 R6Añadidos

.min( { propertyPath : Text } ) : any

ParámetrosTipoDescripción
propertyPathText->Ruta de la propiedad del objeto que se utilizará para la evaluación
ResultBoolean, Text, Number, Collection, Object, Date<-Valor mínimo en la colección

|

Descripción

La función .min() devuelve el elemento con el menor valor de la colección (el primer elemento de la colección tal y como se ordenaría de forma ascendente mediante la función .sort()).

Esta función no modifica la colección original.

Si la colección contiene diferentes tipos de valores, la función .min() devolverá el valor mínimo dentro del primer tipo de elemento en el orden de la lista de tipos (ver la descripción de .sort()).

Si la colección contiene objetos, pase el parámetro propertyPath para indicar la propiedad del objeto cuyo valor mínimo desea obtener.

Si la colección está vacía, .min() devuelve Undefined.

Ejemplo

 var $col : Collection
$col:=New collection(200;150;55)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Alabama";"salary";10500))
$min:=$col.min() //55
$minSal:=$col.min("salary") //10000
$minName:=$col.min("name") //"Alabama"

.orderBy()

Histórico
VersiónModificaciones
v16 R6Añadidos

.orderBy( ) : Collection
.orderBy( pathStrings : Text ) : Collection
.orderBy( pathObjects : Collection ) : Collection
.orderBy( ascOrDesc : Integer ) : Collection

ParámetrosTipoDescripción
pathStringsText->Ruta(s) de propiedad(es) a utilizar para ordenar la colección
pathObjectsCollection->Colección de objetos criterio
ascOrDescInteger->ck ascending o ck descending (valores escalares)
ResultCollection<-Copia ordenada de la colección (copia superficial)

|

Descripción

La función .fill() devuelve una nueva colección que contiene todos los elementos de la colección en el orden especificado.

Esta función devuelve una copia superficial, lo que significa que los objetos o colecciones de ambas colecciones comparten la misma referencia. Si la colección original es una colección compartida, la colección devuelta es también una colección compartida.

Esta función no modifica la colección original.

Si no se pasa ningún parámetro, la función ordena los valores escalares de la colección en orden ascendente (otros tipos de elementos, como objetos o colecciones, se devuelven desordenados). Puede modificar este orden automático pasando las constantes ck ascending o ck descending en el parámetro ascOrDesc (ver más abajo).

También puede pasar un parámetro de criterios para definir cómo deben ordenarse los elementos de la colección. Se admiten tres sintaxis para este parámetro:

  • pathStrings: Texto (fórmula). Sintaxis: propertyPath1 {desc or asc}, propertyPath2 {desc or asc},... (orden por defecto: asc). pathStrings contiene una fórmula compuesta de 1 a x rutas de propiedades y (opcionalmente) órdenes de clasificación, separados por comas. El orden en que se pasan las propiedades determina la prioridad de ordenación de los elementos de la colección. Por defecto, las propiedades se clasifican en orden ascendente. Puede definir el orden de clasificación de una propiedad en la cadena de criterios, separado de la ruta de la propiedad por un solo espacio: pase "asc" para ordenar en orden ascendente o "desc" en orden descendente.

  • pathObjects : Collection. Puede añadir tantos objetos en la colección pathObjects como sea necesario. Por defecto, las propiedades se clasifican en orden ascendente ("descending" es false). Cada elemento de la colección contiene un objeto estructurado de la siguiente manera:

{
"propertyPath": string,
"descending": boolean
}
  • ascOrDesc: Integer. Se pasa una de las siguientes constantes del tema Objects and collections:

    ConstanteTipoValorComentario
    ck ascendingLongint0Los elementos se ordenan de forma ascendente (por defecto)
    ck descendingLongint1Los elementos se ordenan de forma descendente

    This syntax orders scalar values in the collection only (other element types such as objects or collections are returned with an internal order).

Si la colección contiene elementos de diferentes tipos, se agrupan primero por tipo y se ordenan después. Si attributePath lleva a una propiedad de objeto que contiene valores de diferentes tipos, primero se agrupan por tipo y se ordenan después.

  1. null
  2. booleans
  3. cadenas
  4. numbers
  5. objects
  6. collections
  7. dates

Ejemplo 1

Ordenar una colección de números de forma ascendente y descendente:

 var $c; $c2; $3 : Collection
$c:=New collection
For($vCounter;1;10)
$c.push(Random)
End for
$c2:=$c.orderBy(ck ascending)
$c3:=$c.orderBy(ck descending)

Ejemplo 2

Ordenar una colección de objetos a partir de una fórmula de texto con nombres de propiedades:

 var $c; $c2 : Collection
$c:=New collection
For($vCounter;1;10)
$c.push(New object("id";$vCounter;"value";Random))
End for
$c2:=$c.orderBy("value desc")
$c2:=$c.orderBy("value desc, id")
$c2:=$c.orderBy("value desc, id asc")

Ordenar una colección de objetos con una ruta de propiedades:

 var $c; $c2 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"phones";New object("p1";"01";"p2";"02")))
$c.push(New object("name";"Blountsville";"phones";New object("p1";"00";"p2";"03")))

$c2:=$c.orderBy("phones.p1 asc")

Ejemplo 3

Ordenar una colección de objetos utilizando una colección de objetos criterio:

 var $crit; $c; $c2 : COllection
$crit:=New collection
$c:=New collection
For($vCounter;1;10)
$c.push(New object("id";$vCounter;"value";Random))
End for
$crit.push(New object("propertyPath";"value";"descending";True))
$crit.push(New object("propertyPath";"id";"descending";False))
$c2:=$c.orderBy($crit)

Ordenar con una ruta de propiedad:

 var $crit; $c; $c2 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"phones";New object("p1";"01";"p2";"02")))
$c.push(New object("name";"Blountsville";"phones";New object("p1";"00";"p2";"03")))
$crit:=New collection(New object("propertyPath";"phones.p2";"descending";True))
$c2:=$c.orderBy($crit)

.orderByMethod()

Histórico
VersiónModificaciones
v16 R6Añadidos

.orderByMethod( methodName : Text { ; ...extraParam : expression } ) : Collection

ParámetrosTipoDescripción
methodNameText->Nombre del método utilizado para especificar el orden de clasificación
extraParamexpresión->Parámetros del método
ResultCollection<-Copia ordenada de la colección (copia superficial)

|

Descripción

La función .find() The .orderByMethod() function.

Esta función devuelve una copia superficial, lo que significa que los objetos o colecciones de ambas colecciones comparten la misma referencia. Si la colección original es una colección compartida, la colección devuelta es también una colección compartida.

Esta función no modifica la colección original.

En methodName, pase un método de comparación que compare dos valores y devuelva true en $1.result si el primer valor es menor que el segundo. Puede suministrar parámetros adicionales a methodName si es necesario.

  • methodName recibirá los siguientes parámetros:
    • $1 (objeto), donde:
      • $1.value (todo tipo): primer valor del elemento a comparar
      • $1.value2 (todo tipo): segundo valor del elemento a comparar
    • $2...$N (cualquier tipo): parámetros adicionales
  • methodName define el siguiente parámetro:
    • $1.result (boolean): true si $1.value < $1.value2, false de lo contrario

Ejemplo 1

Desea ordenar una colección de cadenas en orden numérico en lugar de orden alfabético:

 var $c; $c2; $c3 : Collection
$c:=New collection
$c.push("33";"4";"1111";"222")
$c2:=$c.orderBy() //$c2=["1111","222","33","4"], alphabetical order
$c3:=$c.orderByMethod("NumAscending") // $c3=["4","33","222","1111"]

El código para NumAscending es:

 $1.result:=Num($1.value)<Num($1.value2)

Ejemplo 2

Quiere ordenar una colección de cadenas según su longitud:

 var $fruits; $c2 : Collection
$fruits:=New collection("Orange";"Apple";"Grape";"pear";"Banana";"fig";"Blackberry";"Passion fruit")
$c2:=$fruits.orderByMethod("WordLength")
//$c2=[Passion fruit,Blackberry,Orange,Banana,Apple,Grape,pear,fig]

El código para WordLength es:

 $1.result:=Length(String($1.value))>Length(String($1.value2))

Ejemplo 3

Ordenar los elementos de la colección por código de caracteres o alfabéticamente:

var $strings1; $strings2 : Collection
$strings1:=New collection("Alpha";"Charlie";"alpha";"bravo";"Bravo";"charlie")

//utilizando el código de caracteres:
$strings2:=$strings1.orderByMethod("sortCollection";sk character codes)
// resultado : ["Alpha","Bravo","Charlie","alpha","bravo","charlie"]

//utilizando el lenguaje:
$strings2:=$strings1.orderByMethod("sortCollection";sk strict)
// resultado : ["alpha","Alpha","bravo","Bravo","charlie","Charlie"]

El método sortCollection:

var$1Object
var$2Integer // opción de ordenación

$1.result:=(Compare strings($1.value;$1.value2;$2)<0)

.pop()

Histórico
VersiónModificaciones
v16 R6Añadidos

.pop() : any

ParámetrosTipoDescripción
Resultany<-Último elemento de la colección

|

Descripción

La función .pop() elimina el último elemento de la colección y lo devuelve como resultado de la función.

Esta función modifica la colección original.

Cuando se aplica a una colección vacía, .pop() devuelve undefined.

Ejemplo

.pop(), utilizado junto con .push(), puede utilizarse para implementar una funcionalidad primera entrada, última salida de tratamiento de datos apilados:

 var $stack : Collection
$stack:=New collection //$stack=[]
$stack.push(1;2) //$stack=[1,2]
$stack.pop() //$stack=[1] Devuelve 2
$stack.push(New collection(4;5)) //$stack=[[1,[4,5]]
$stack.pop() //$stack=[1] Devuelve [4,5]
$stack.pop() //$stack=[] Devuelve 1

.push()

Histórico
VersiónModificaciones
v16 R6Añadidos

.push( element : any { ;...elementN } ) : Collection

ParámetrosTipoDescripción
elementMixed->Elemento(s) a añadir a la colección
ResultCollection<-Colección original que contiene los elementos añadidos

|

Descripción

La función .push() añade uno o más elemento(s) al final de la instancia de la colección y devuelve la colección editada.

Esta función modifica la colección original.

Ejemplo 1

 var $col : Collection
$col:=New collection(1;2) //$col=[1,2]
$col.push(3) //$col=[1,2,3]
$col.push(6;New object("firstname";"John";"lastname";"Smith"))
//$col=[1,2,3,6,{firstname:John,lastname:Smith}

Ejemplo 2

Quiere ordenar la colección resultante:

 var $col; $sortedCol : Collection
$col:=New collection(5;3;9) //$col=[5,3,9]
$sortedCol:=$col.push(7;50).sort()
//$col=[5,3,9,7,50]
//$sortedCol=[3,5,7,9,50]

.query()

Histórico
VersiónModificaciones
v17 R5Soporte de querySettings
v16 R6Añadidos

.query( queryString : Text ; ...value : any ) : Collection
.query( queryString : Text ; querySettings : Object ) : Collection

ParámetrosTipoDescripción
queryStringText->Criterio de búsqueda
valueMixed->Valor(es) a comparar cuando se utiliza(n) marcador(es) de posición
querySettingsObject->Opciones de búsqueda: parámetros, atributos
ResultCollection<-Elemento(s) que coincide(n) con queryString en la colección

|

Descripción

La función .query() devuelve todos los elementos de una colección de objetos que coinciden con las condiciones de búsqueda definido por queryString y (opcionalmente) value o querySettings. Si la colección original es una colección compartida, la colección devuelta es también una colección compartida.

Esta función no modifica la colección original.

El parámetro queryString utiliza la siguiente sintaxis:

propertyPath comparator value {logicalOperator propertyPath comparator value}

Para obtener información detallada sobre cómo construir una consulta utilizando los parámetros queryString, value y querySettings, consulte la descripción de la función dataClass.query().

Esta función no modifica la colección original.

Ejemplo 1

 var $c; $c2; $c3 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$c2:=$c.query("name = :1";"Cleveland") //$c2=[{name:Cleveland,zc:35049}]
$c3:=$c.query("zc > 35040") //$c3=[{name:Cleveland,zc:35049},{name:Clanton,zc:35046},{name:Clanton,zc:35045}]

Ejemplo 2

 var $c : Collection
$c:=New collection
$c.push(New object("name";"Smith";"dateHired";!22-05-2002!;"age";45))
$c.push(New object("name";"Wesson";"dateHired";!30-11-2017!))
$c.push(New object("name";"Winch";"dateHired";!16-05-2018!;"age";36))

$c.push(New object("name";"Sterling";"dateHired";!10-5-1999!;"age";Null))
$c.push(New object("name";"Mark";"dateHired";!01-01-2002!))
$c.push(New object("name";"Winch";"dateHired";!16-05-2018!;"age";36))

$c.push(New object("name";"Sterling";"dateHired";!10-5-1999!;"age";Null))
$c.push(New object("name";"Mark";"dateHired";!01-01-2002!))

Este ejemplo devuelve las personas cuyo nombre contiene "in":

 $col:=$c.query("name = :1";"@in@")
//$col=[{name:Winch...},{name:Sterling...}]

Este ejemplo devuelve las personas cuyo nombre no empieza por una cadena de una variable (introducida por el usuario, por ejemplo):

 $col:=$c.query("name # :1";$aString+"@")
//if $astring="W"
//$col=[{name:Smith...},{name:Sterling...},{name:Mark...}]

Este ejemplo devuelve las personas cuya edad no se conoce (propiedad definida como null o indefinida):

 $col:=$c.query("age=null") //no están permitidos los marcadores de posición con "null"
//$col=[{name:Wesson...},{name:Sterling...},{name:Mark...}]

Este ejemplo devuelve las personas contratadas hace más de 90 días:

 $col:=$c.query("dateHired < :1";(Current date-90))
//$col=[{name:Smith...},{name:Sterling...},{name:Mark...}] if today is 01/10/2018 si hoy es 01/10/2018

Ejemplo 3

Se pueden encontrar más ejemplos de búsquedas en la página dataClass.query().

.reduce()

Histórico
VersiónModificaciones
v16 R6Añadidos

.reduce( methodName : Text ) : any
.reduce( methodName : Text ; initValue : any { ; ...param : expression } ) : any

ParámetrosTipoDescripción
methodNameText->Nombre de la función a la que se llama para procesar los elementos de la colección
initValueText, Number, Object, Collection, Date, Boolean->Valor a utilizar como primer argumento de la primera llamada de methodName
paramexpresión->Parámetro(s) a pasar a methodName
ResultText, Number, Object, Collection, Date, Boolean<-Resultado del valor del acumulador

|

Descripción

La función .reduce() The .reduce() function.

Esta función no modifica la colección original.

En methodName, pase el nombre del método a utilizar para evaluar los elementos de la colección, junto con su(s) parámetro(s) en param (opcional). methodName toma cada elemento de la colección y realiza todas las operaciones deseadas para acumular el resultado en $1.accumulator, que se devuelve en $1.value.

Puede pasar el valor para inicializar el acumulador en initValue. Si se omite, $1.accumulator> comienza con Undefined.

methodName recibe los siguientes parámetros:

  • en $1.value: valor del elemento a procesar
  • en $2: param
  • en $N...: paramN...

methodName define el(los) siguiente(s) parámetro(s):

  • $1.accumulator: valor que va a ser modificado por la función y que es inicializado por initValue.
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

Ejemplo 1

 C_COLLECTION($c)
$c:=New collection(5;3;5;1;3;4;4;6;2;2)
$r:=$c.reduce("Multiply";1) //devuelve 86400

Con el siguiente método Multiply:

 If(Value type($1.value)=Is real)
$1.accumulator:=$1.accumulator*$1.value
End if

Ejemplo 2

Este ejemplo permite reducir varios elementos de la colección a uno solo:

 var $c;$r : Collection
$c:=New collection
$c.push(New collection(0;1))
$c.push(New collection(2;3))
$c.push(New collection(4;5))
$c.push(New collection(6;7))
$r:=$c.reduce("Flatten") //$r=[0,1,2,3,4,5,6,7]

Con el siguiente método Flatten:

 If($1.accumulator=Null)
$1.accumulator:=New collection
End if
$1.accumulator.combine($1.value)

.remove()

Histórico
VersiónModificaciones
v16 R6Añadidos

.remove( index : Integer { ; howMany : Integer } ) : Collection

ParámetrosTipoDescripción
indexInteger->Elemento en el que se inicia la eliminación
howManyInteger->Número de elementos a eliminar, o 1 elemento si se omite
ResultCollection<-Colección original sin elementos eliminados

|

Descripción

La función .insert() inserta element en la posición índice especificada en la instancia de la colección y devuelve la colección editada.

Esta función modifica la colección original.

En index, pase la posición donde quiere eliminar el elemento de la colección.

Esta función no modifica la colección original. If startFrom < 0, it is considered as the offset from the end of the collection (startFrom:=startFrom+length).

  • Si índice < 0, se recalcula como index:=index+length (se considera el desplazamiento desde el final de la colección).
  • Si el valor calculado < 0, index toma el valor 0.
  • Si el valor calculado > la longitud de la colección, index se establece para la longitud.

En howMany, pase el número de elementos a eliminar de index. Si no se especifica howMany, se elimina un elemento.

Si se intenta eliminar un elemento de una colección vacía, el método no hace nada (no se genera ningún error).

Ejemplo

 var $col : Collection
$col:=New collection("a";"b";"c";"d";"e";"f";"g";"h")
$col.remove(3) // $col=["a","b","c","e","f","g","h"]
$col.remove(3;2) // $col=["a","b","c","g","h"]
$col.remove(-8;1) // $col=["b","c","g","h"]
$col.remove(-3;1) // $col=["b","g","h"]

.resize()

Histórico
VersiónModificaciones
v16 R6Añadidos

.resize( size : Integer { ; defaultValue : any } ) : Collection

ParámetrosTipoDescripción
sizeInteger->Nuevo tamaño de la colección
defaultValueNumber, Text, Object, Collection, Date, Boolean->Valor por defecto para llenar nuevos elementos
ResultCollection<-Colección original redimensionada

|

Descripción

La función .resize() define la longitud de la colección al nuevo tamaño especificado y devuelve la colección redimensionada.

Esta función modifica la colección original.

  • Si size < la longitud de la colección, los elementos que exceden se eliminan de la colección.
  • Si size > longitud de la colección, la longitud de la colección se incrementa al tamaño.

Por defecto, los nuevos elementos se llenan con valores null. Puede especificar el valor a llenar en los elementos añadidos utilizando el parámetro defaultValue.

Ejemplo

 var $c : Collection
$c:=New collection
$c.resize(10) // $c=[null,null,null,null,null,null,null,null,null,null]

$c:=New collection
$c.resize(10;0) // $c=[0,0,0,0,0,0,0,0,0,0]

$c:=New collection(1;2;3;4;5)
$c.resize(10;New object("name";"X")) //$c=[1,2,3,4,5,{name:X},{name:X},{name:X},{name:X},{name:X}]

$c:=New collection(1;2;3;4;5)
$c.resize(2) //$c=[1,2]

.reverse()

Histórico
VersiónModificaciones
v16 R6Añadidos

.reverse( ) : Collection

ParámetrosTipoDescripción
ResultCollection<-Copia invertida de la colección

|

Descripción

La función .reverse() devuelve una copia profunda de la colección con todos sus elementos en orden inverso. Si la colección original es una colección compartida, la colección devuelta es también una colección compartida.

Esta función no modifica la colección original.

Ejemplo

 var $c; $c2 : Collection
$c:=New collection(1;3;5;2;4;6)
$c2:=$c.reverse() //$c2=[6,4,2,5,3,1]

.shift()

Histórico
VersiónModificaciones
v16 R6Añadidos

.shift() : any

ParámetrosTipoDescripción
Resultany<-Primer elemento de la colección

|

Descripción

La función .shift() elimina el primer elemento de la colección y lo devuelve como resultado de la función.

Esta función modifica la colección original.

Si la colección está vacía, este método no hace nada.

Ejemplo

 var $c : Collection
var $val : Variant
$c:=New collection(1;2;4;5;6;7;8)
$val:=$c.shift()
// $val=1
// $c=[2,4,5,6,7,8]

.slice()

Histórico
VersiónModificaciones
v16 R6Añadidos

.slice( startFrom : Integer { ; end : Integer } ) : Collection

ParámetrosTipoDescripción
startFromInteger->Índice de inicio (incluido)
endInteger->Índice final (no incluido)
ResultCollection<-Nueva colección que contiene elementos cortados (copia superficial)

|

Descripción

La función .slice() devuelve una parte de una colección en una nueva colección, seleccionado desde startFrom index hasta end index (final no incluido). Esta función devuelve una copia superficial de la colección. Si la colección original es una colección compartida, la colección devuelta es también una colección compartida.

Esta función no modifica la colección original.

La colección devuelta contiene el elemento especificado por startFrom y todos los elementos subsiguientes hasta, pero sin incluir, el elemento especificado por end. Si sólo se especifica el parámetro startFrom, la colección devuelta contiene todos los elementos desde startFrom hasta el último elemento de la colección original.

  • Si startFrom < 0, se recalcula como startFrom:=startFrom+length (se considera el desplazamiento desde el final de la colección).
  • Si el valor calculado < 0, startFrom toma el valor 0.
  • Si end < 0 , se recalcula como end:=end+length.
  • If end < startFrom (passed or calculated values), the method does nothing.

Ejemplo

 var $c; $nc : Collection
$c:=New collection(1;2;3;4;5)
$nc:=$c.slice(0;3) //$nc=[1,2,3]
$nc:=$c.slice(3) //$nc=[4,5]
$nc:=$c.slice(1;-1) //$nc=[2,3,4]
$nc:=$c.slice(-3;-2) //$nc=[3]

.some()

Histórico
VersiónModificaciones
v16 R6Añadidos

.some( methodName : Text { ; ...param : any } ) : Boolean
.some( startFrom : Integer ; methodName : Text { ; ...param : any } ) : Boolean

ParámetrosTipoDescripción
startFromInteger->Índice para iniciar la prueba en
methodNameText->Nombre del método a llamar para la prueba
paramMixed->Parámetro(s) a pasar a methodName
ResultBoolean<-True si al menos un elemento ha superado la prueba con éxito

|

Descripción

La propiedad .length devuelve true si al menos un elemento de la colección ha superado con éxito una prueba implementado en el método methodName suminstrado.

En methodName, pase el nombre del método a utilizar para evaluar los elementos de la colección, junto con su(s) parámetro(s) en param (opcional). methodName puede realizar cualquier prueba, con o sin los parámetros. In methodName, pass the name of the method to use to evaluate collection elements, along with its parameter(s) in param (optional).

methodName recibe los siguientes parámetros:

  • en $1.value: valor del elemento a evaluar
  • en $2: param
  • en $N...: param2...paramN

methodName define el(los) siguiente(s) parámetro(s):

  • $1.result (boolean): true si la evaluación del valor del elemento tiene éxito, si no false.
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

En algún caso, en el momento en que la función .some() encuentre el primer elemento de la colección que devuelva true en $1.result, deja de llamar a methodName y devuelve false.

Por defecto, .some() comprueba toda la colección. Opcionalmente, puede pasar el índice de un elemento desde el cual iniciar la prueba en startFrom.

  • Si startFrom >= la longitud de la colección, se devuelve False, lo que significa que la colección no se prueba.
  • Si startFrom < 0, se considera como el desplazamiento desde el final de la colección.
  • Si startFrom = 0, se busca en toda la colección (por defecto).

Ejemplo

 var $c : Collection
var $b : Boolean
$c:=New collection
$c.push(-5;-3;-1;-4;-6;-2)
$b:=$c.some("NumberGreaterThan0") // devuelve false
$c.push(1)
$b:=$c.some("NumberGreaterThan0") // devuelve true

$c:=New collection
$c.push(1;-5;-3;-1;-4;-6;-2)
$b:=$c.some("NumberGreaterThan0") //$b=true
$b:=$c.some(1;"NumberGreaterThan0") //$b=false

Con el siguiente método NumberGreaterThan0:


$1.result:=$1.value>0

.sort()

Histórico
VersiónModificaciones
v16 R6Añadidos

.sort() : Collection
.sort( methodName : Text { ; ...extraParam : any } ) : Collection

ParámetrosTipoDescripción
methodNameText->Nombre del método utilizado para especificar el orden de clasificación
extraParamany->Parámetros del método
ResultCollection<-Colección original ordenada

|

Descripción

La función .orderBy() ordena los elementos de la colección original y también devuelve la colección ordenada.

Esta función modifica la colección original.

Si se llama a .sort() sin parámetros, sólo se ordenan los valores escalares (número, texto, fecha, booleanos). Los elementos se ordenan por defecto de forma ascendente, según su tipo. Si la colección contiene elementos de diferentes tipos, se agrupan primero por tipo y se ordenan después. Si attributePath lleva a una propiedad de objeto que contiene valores de diferentes tipos, primero se agrupan por tipo y se ordenan después.

  1. null
  2. booleans
  3. cadenas
  4. numbers
  5. objects
  6. collections
  7. dates

Si desea ordenar los elementos de la colección en otro orden o clasificar cualquier tipo de elemento, debe suministrar en methodName, un método de comparación que compare dos valores y devuelva true en $1.result si el primer valor es menor que el segundo. Puede suministrar parámetros adicionales a methodName si es necesario.

  • methodName recibirá los siguientes parámetros:
    • $1 (objeto), donde:
      • $1.value (todo tipo): primer valor del elemento a comparar
      • $1.value2 (todo tipo): segundo valor del elemento a comparar
    • $2...$N (cualquier tipo): parámetros adicionales

methodName define el siguiente parámetro:

  • $1.result(boolean): true if$1.value < $1.value2, false en caso contrario

Ejemplo 1

 var $col; $col2 : Collection
$col:=New collection("Tom";5;"Mary";3;"Henry";1;"Jane";4;"Artie";6;"Chip";2)
$col2:=$col.sort() // $col2=["Artie","Chip","Henry","Jane","Mary","Tom",1,2,3,4,5,6]
// $col=["Artie","Chip","Henry","Jane","Mary","Tom",1,2,3,4,5,6]

Ejemplo 2

 var $col; $col2 : Collection
$col:=New collection(10;20)
$col2:=$col.push(5;3;1;4;6;2).sort() //$col2=[1,2,3,4,5,6,10,20]

Ejemplo 3

 var $col; $col2; $col3 : Collection
$col:=New collection(33;4;66;1111;222)
$col2:=$col.sort() //ordenación numérica: [4,33,66,222,1111]
$col3:=$col.sort("numberOrder") //ordenación alfabética: [1111,222,33,4,66]
  //método proyecto numberOrder
var $1 : Object
$1.result:=String($1.value)<String($1.value2)

.sum()

Histórico
VersiónModificaciones
v16 R6Añadidos

.sum( { propertyPath : Text } ) : Real

ParámetrosTipoDescripción
propertyPathText->Ruta de la propiedad del objeto que se utilizará para el cálculo
ResultReal<-Suma de los valores de la colección

|

Descripción

La función .orderByMethod() devuelve la suma de todos los valores de la instancia de la colección.

Para el cálculo sólo se tienen en cuenta los elementos numéricos (se ignoran otros tipos de elementos).

Si la colección contiene objetos, pasa el parámetro propertyPath para indicar la propiedad del objeto a tener en cuenta.

.sum() devuelve 0 si:

  • la colección está vacía,
  • la colección no contiene elementos numéricos,
  • propertyPath no se encuentra en la colección.

Ejemplo 1

 var $col : Collection

var $vSum : Real
$col:=New collection(10;20;"Monday";True;2)
$vSum:=$col.sum() //32

Ejemplo 2

 var $col : Collection
var $vSum : Real
$col:=New collection
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500,5))
$vSum:=$col.sum("salary") //$vSum=70500,5

.unshift()

Histórico
VersiónModificaciones
v16 R6Añadidos

.unshift( value : any { ;...valueN : any } ) : Collection

ParámetrosTipoDescripción
valueText, Number, Object, Collection, Date->Valor(es) a insertar al principio de la colección
ResultReal<-Colección que contiene los elementos añadidos

|

| | | |

Descripción

La función .unshift() inserta el valor dado al principio de la colección y devuelve la colección modificada.

Esta función modifica la colección original.

Si se pasan varios valores, se insertan todos a la vez, lo que significa que aparecen en la colección resultante en el mismo orden que en la lista de argumentos.

Ejemplo

 var $c : Collection
$c:=New collection(1;2)
$c.unshift(4) // $c=[4,1,2]
$c.unshift(5) //$c=[5,4,1,2]
$c.unshift(6;7) // $c=[6,7,5,4,1,2]