Function reduce()
itère un calcul désigné appliqué à chaque élément d'une liste un après l'autre. Les développeurs doivent définir le calcul via une expression, exécuter d'abord le calcul basé sur une valeur initiale et le 1er élément de la liste, puis ré-exécuter le calcul basé sur le résultat du calcul et le 2ème élément de la liste, ... jusqu'à ce que tous les éléments de la liste soient parcourus.
Le modèle d'itération de cette fonction est similaire au 'for' dans la plupart des langages de programmation, sauf que l'index de chaque itération n'est pas exposé aux développeurs.
Syntaxe:
reduce(<result> = <initial_value>, <element> in <list> | <expression>)
- <result> désigne le nom de la variable du résultat du calcul
- <initial_value> désigne la valeur initiale
- <element> désigne le nom de la variable de l'élément dans la liste
- <list> désigne l'alias de la liste
- <expression> désigne le calcul
Utilisation Courante
Exemple : Calculer la somme de tous les nombres dans [1,2,3]
with [1,2,3] as list
return reduce(sum = 0, element in list | sum + element) as mySum
6
Graphe exemple : (à utiliser pour les exemples suivants)
Exécutez les UQL suivants un par un dans un graphset vide pour créer les données de graphe :create().node_schema("firm").node_schema("human").edge_schema("hold")
create().edge_property(@hold, "portion", double)
insert().into(@firm).nodes([{_id:"F001", _uuid:1}, {_id:"F002", _uuid:2}])
insert().into(@human).nodes([{_id:"H001", _uuid:3}, {_id:"H002", _uuid:4}])
insert().into(@hold).edges([{_uuid:1, _from_uuid:3, _to_uuid:1, portion:0.3}, {_uuid:2, _from_uuid:2, _to_uuid:1, portion:0.7}, {_uuid:3, _from_uuid:3, _to_uuid:2, portion:0.4}, {_uuid:4, _from_uuid:4, _to_uuid:2, portion:0.6}])
Exemple : Calculer la part de chaque UBO de F001
n({_id == "F001"}).le()[:5].n({@human} as UBO) as p
with pedges(p) as edgeList
call{
with edgeList
uncollect edgeList as edges
with collect(edges.portion) as portionList
return reduce(init = 1, element in portionList | init * element) as share
}
group by UBO
return table(UBO._id, sum(share))
| UBO._id | sum(share) |
|---------|------------|
| H001 | 0.58 |
| H002 | 0.42 |