Cette fonction retourne une séquence résultat du tri d'une séquence d'objets de type Hash.
Le tri peut être ascendant ou descendant. Il est effectué en fonction des valeurs d'un attribut d'objet.
Pour cela, il faut spécifier le nom de l'attribut ou la séquence de noms d'attributs représentant le chemin en notation pointée menant à l'attribut d'objet de sous-niveau.
Lorsque les valeurs de l'attribut indiqué sont de type String, le tri appliqué est un tri lexicographique.
Remarque :
Quelques différences par rapport à la fonction "built-in" Freemarker "sort_by" (cliquez ici pour plus de détails) appliquée à une séquence ([...]?sort_by) :
- Le résultat obtenu est identique pour les types Boolean / Number / Date / Time / Date-time. Pour le type String, la fonction Freemarker "sort_by" applique un tri utilisant une collation,
- La fonction "sort_by" ne permet pas de trier en descendant. La seule solution est d'utiliser la fonction Freemarker "reverse" ([...]?sort_by()?reverse), mais l'ordre original des valeurs qui sont égales n'est pas respecté.
Paramètres
Sequence de Hash |
seqHash |
Séquence d'objets Hash à trier |
Obligatoire |
String / Sequence de String |
sedAttrName |
Attribut d'objet sur lequel appliquer le tri. Il est identifié par son nom ou par la séquence de noms d'attributs représentant le chemin en notation pointée menant à lui. |
Obligatoire |
Boolean |
ascendingOrder |
"true" pour un tri ascendant, "false" pour un tri descendant |
Optionnel. La valeur par défaut est "true" |
Par exemple
<#assign seqObj = [ {"name":"whale", "weight":2000}, {"name":"Barbara", "weight":53}, {"name":"zeppelin", "weight":-200}, {"name":"aardvark", "weight":30}, {"name":"beetroot", "weight":0.3} ]> <#-- Order by name --> <#list hardisCore.lexicographicSortBy(seqObj, "name") as aObj> - ${aObj.name}: ${aObj.weight} </#list>
La sortie est :
- aardvark: 30
- Barbara: 53
- beetroot: 0.3
- whale: 2000
- zeppelin: -200
Autre exemple
<#assign members = [ {"name": {"first": "Joe", "last": "Smith"}, "age": 40}, {"name": {"first": "Fred", "last": "Crooger"}, "age": 35}, {"name": {"first": "Amanda", "last": "Fox"}, "age": 25}]> <#-- Sorted by name.last --> <#list hardisCode.lexicographicSortBy(members, ['name', 'last']) as aObj> - ${aObj.name.last}, ${aObj.name.first}: ${aObj.age} years old </#list>
La sortie est :
- Crooger, Fred: 35 years old
- Fox, Amanda: 25 years old
- Smith, Joe: 40 years old ↑ Haut de page