Peut-on trier les tableaux de nombres ?

Blogger - XML operators - sort array[number]

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.

  1. Définir un tableau de nombres. Ce tableau peut être explicite ou une donnée Blogger.

  2. Dans une boucle, choisir l'ordre de tri avec l'opérateur to, en mentionnant les valeurs min et max.

  3. 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 ou contains).


<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 !



Spotlight

Populaires cette semaine