Peut-on trier les tableaux de nombres ?
Notre cher ami Toto est de retour et cette fois-ci, il est à nouveau confronté à un problème de codage qui peut paraître insoluble. Est-il possible de trier une liste de nombres à l'aide des opérateurs Blogger ?
Blogger Code PE réussira-t'il à résoudre ce nouveau casse-tête ? Mystère !
Notre réponse
Nous savons déjà que les opérateurs Lambdas peuvent filtrer et reconstruire une liste en fonction de certains critères, mais ils n'ont pas la faculté de trier un tableau, puisque l'opérateur sort
n'a pas été développé par l'ingénierie Blogger.
Toutefois, en combinant un lambda avec l'opérateur de tableau to
on peut y arriver, à condition que cette liste de nombres ne soit pas trop volumineuse et qu'on connaisse par avance les valeurs minimum et maximum.
Définir un tableau de nombres. Ce tableau peut être explicite ou une donnée Blogger.
Dans une boucle, choisir l'ordre de tri avec l'opérateur
to
, en mentionnant les valeurs min et max.A l'intérieur de la boucle, ajouter une condition et comparer le nombre courant de la boucle "min to max" avec les nombres de la liste. L'opérateur peut être un lambda, ou un opérateur membres (
in
oucontains
).
<ul> <b:with value='[25, 31, 5, 18, 13, 4, 3]' var='numbers'> <b:loop values='0 to 35' var='sort'> <b:if cond='data:numbers any (n => n == data:sort)'> <li><data:sort/></li> </b:if> </b:loop> </b:with> </ul>
Le résultat sera :
- 3
- 4
- 5
- 13
- 18
- 25
- 31
Grâce à ce système de combinaison, il est tout à fait possible de trier les nombres par ordre croissant ou décroissant et même en plus de supprimer ceux qui sont en double.
Tout cela est bien évidemment transposable avec tous les tableaux qui permettent de fixer un nombre comme critère. Par exemple les articles (dans le gadget Blog) triés par nombre de libellés. Ce cas est relativement facile à mettre en œuvre puisqu'on connait déjà les valeurs "min" et "max" qui sont fixées entre 0 et 20 libellés par article (Merci Blogger pour la limitation).
<ul> <b:loop values='20 to 0' var='sort'> <b:loop values='data:posts where (p => p.labels.size == data:sort)' var='post'> <li><data:post.title/> (nombre de libellés : <data:post.labels.size/>)</li> </b:loop> </b:loop> </ul>
Peut-on aussi trier une liste par ordre alphabétique ?
Aaaaah non Toto ! Là, tu en demandes trop !
Autres tutos
- Peut-on trier les tableaux de nombres ?
- Comment contourner le changement automatique du type d'une donnée dans une opération XML Blogger ?
- Modifier le menu des boutons de partage
- Ajouter des boutons au menu de partage
- Une pagination automatique avec le gadget Pages
- Favicons multi-sets : icon, apple-touch-icon et msapplication
- Masquer des éléments des thèmes dynamiques
- Créer des sous-catégories dans le gadget Libellés
- Une pagination automatique avec le gadget Libellés
- Filtrer les libellés dans les articles
- Créer un sélecteur d'articles
- Ajouter son blog au module de recherche Firefox
- inReplyTo : Développer un module de commentaires avec réponses