Indexer un tableau en Ruby
L’autre jour j’ai eu besoin de manipuler une liste A et pour chaque objet de cette liste je devais retrouver ses propriétés secondaires qui étaient stockées dans une autre liste B. Chacun des éléments de B comporte une référence à l’un des objets de la liste A.
En temps normal j’aurais du utiliser la méthode Enumerable#find
mais chacune de mes listes contient beaucoup d’items et ça n’aurait pas été très performant de devoir parcourir mon tableau B pour chaque item de la liste A.
J’ai donc eu l’idée de transformer mon tableau B en Hash
dans lequel chaque clé sera l’identifiant d’un des objets de ma liste A. Ainsi la récupération d’un objet sera simplifiée, car il me suffira de faire my_hash[identifiant]
pour récupérer les données qui m’intéresse.
J’ai commencé à convertir mon tableau comme j’ai l’habitude de le faire avec la méthode Enumerable#each_with_object
comme j’avais l’habitude de faire :
C’est une fois que j’ai écrit ces quelques lignes que Rubocop m’a signaler que je pouvais utiliser directement la méthode Enumerable#index_by
pour obtenir le même résultat. Il s’agit de l’une des nombreuses méthodes apportés par la gem activesupport
afin d’étoffer la boite à outils à disposition des développeurs Ruby.