La vie

Tableau de tri en rubis

Tableau de tri en rubis


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Le tri préoccupait les informaticiens dès le début. De nombreux algorithmes sont entrés et sont devenus inutilisables et, aujourd'hui encore, de nouveaux algorithmes repoussent les limites de la performance. En tant que langage de haut niveau, vous n'implémenterez pas les algorithmes de tri dans Ruby si vous vous souciez de la performance. De plus, le tri des tableaux et autres collections est encore plus important que Ruby fait pour vous.

01de 04

Tri des tableaux

Techniquement, le tri est une tâche gérée par le module Enumerable. Le module Enumerable est ce qui lie tous les types de collections Ruby. Il gère les itérations sur les collections, le tri, le repérage et la recherche de certains éléments, etc. Comment Enumerable trie une collection est un peu mystérieux, ou du moins, il devrait rester tel. L'algorithme de tri n'est pas pertinent, la seule chose que vous devez savoir, c'est que les objets de la collection sont comparés à l'aide de "l'opérateur de vaisseau spatial".

02 sur 04

Tri dans un vaisseau spatial

"L'opérateur de vaisseau spatial" prend deux objets, les compare et renvoie -1, 0 ou 1. C'est un peu vague, mais l'opérateur lui-même n'a pas un comportement très bien défini. Prenons par exemple les objets numériques. Si vous avez deux objets numériquesune etbet évaluerun B, que va évaluer l'expression? Dans le cas de Numerics, c'est facile à dire. Si a est supérieur à b, il sera -1, s'il est égal, il sera 0 et si b est supérieur à a, il sera 1. Ceci est utilisé pour indiquer à l'algorithme de tri lequel des deux objets doit être aller en premier dans le tableau. Rappelez-vous simplement que si l'opérande de gauche doit arriver en premier dans le tableau, il doit être évalué à -1, si la main droite doit être en premier, il doit être 1 et s'il n'a pas d'importance, il doit être 0.

Il ne suit pas toujours ces règles ordonnées. Que se passe-t-il si vous utilisez cet opérateur sur deux objets de types différents? Vous aurez probablement une exception. Qu'est-ce qui se passe quand vous appelez1 'singe'? Ce sera l'équivalent d'appeler1 ('singe'), ce qui signifie que la méthode actuelle est appelée sur lela gauche opérande etFixnum # renvoie nil si l'opérande de droite n'est pas numérique. Si l'opérateur renvoie nil, la méthode de tri lève une exception. Par conséquent, avant de trier les tableaux, assurez-vous qu'ils contiennent des objets pouvant être triés.

Deuxièmement, le comportement réel de l'opérateur du vaisseau spatial n'est pas défini. Il n'est défini que pour certaines des classes de base, et pour vos classes personnalisées, c'est à vous de choisir ce que vous voulez qu'elles soient. Si tu as unÉtudiant classe, vous pouvez demander aux élèves de trier par nom, prénom, niveau scolaire ou une combinaison de ces éléments. Sachez donc toujours que le comportement de l'opérateur et du tri du vaisseau spatial n'est pas bien défini pour les types de base.

03 sur 04

Effectuer un tri

Vous avez un tableau d'objets numériques et vous souhaitez les trier. Il existe deux méthodes principales pour le faire:Trier etTrier!. Le premier crée une copie du tableau, le trie et le renvoie. La seconde trie le tableau en place.

C'est assez explicite. Alors prenons un cran. Que faire si vous ne voulez pas compter sur l'opérateur du vaisseau spatial? Et si vous voulez un comportement complètement différent? Ces deux méthodes de tri utilisent un paramètre de bloc facultatif. Ce bloc prend deux paramètres et devrait donner des valeurs exactement comme le fait l'opérateur du vaisseau spatial: -1, 0 et 1. Donc, étant donné un tableau, nous voulons le trier de sorte que toutes les valeurs qui sont divisibles par 3 soient les premières, et toutes les autres après. . L'ordre réel n'a pas d'importance ici, il suffit que les divisibles par 3 soient les premiers.

Comment cela marche-t-il? Tout d’abord, notez l’argument de blocage de la méthode de tri. Deuxièmement, notez les divisions modulo effectuées sur les paramètres de bloc et la réutilisation de l'opérateur de vaisseau spatial. Si l'on est un multiple de 3, le modulo sera 0, sinon ce sera 1 ou 2. Comme 0 triera avant 1 ou 2, seul le modulo compte ici. L'utilisation d'un paramètre de bloc est particulièrement utile dans les tableaux comportant plusieurs types d'élément ou lorsque vous souhaitez effectuer un tri sur des classes personnalisées sans opérateur de vaisseau spatial défini.

04 sur 04

Un dernier tri

Il existe une autre méthode de tri, appeléeTrier par. Cependant, vous devez d’abord comprendre la traduction des tableaux et des collections avec map avant de vous attaquer à sort_by.


Voir la vidéo: Calcul de densité d'une pierre (Juin 2022).


Commentaires:

  1. Shazilkree

    je ne suis pas d'accord avec vous

  2. Migar

    Et j'ai bien aimé…

  3. Gadhra

    Le même...

  4. Teirtu

    Et dans quelle ville, quel pays ?? très créatif !!!!!)))))

  5. Gardajar

    Tout à fait juste! C'est une bonne idée. Je t'encourage.



Écrire un message