Ruby: Comment trouver l'indice de la durée minimale de l'élément de tableau?
Est-il possible de réécrire cette plus élégant? Je pense que c'est un mauvais morceau de code et doit être refait.
>> a = [2, 4, 10, 1, 13]
=> [2, 4, 10, 1, 13]
>> index_of_minimal_value_in_array = a.index(a.min)
=> 3
Sérieusement?
Je ne suis pas sûr à ce sujet. Peut-être que c'est mon anxiété excessive.
Je dirais que c'est à peu près aussi propre qu'il l'obtient, donc pas besoin de "refactoring" ici.
Que faire si il n'y a plus d'une valeur minimale de la matrice? Voulez-vous le premier, le dernier, ou l'ensemble d'entre eux? BTW, je pense que cela vaut la peine d'être question.
Pouvez-vous mentionner les raisons pour lesquelles vous êtes à la recherche pour l'index en premier lieu? Si vous pouvez décrire le problème plus vaste, peut-être il ya une autre approche.
a.index(a.min)
?Je ne suis pas sûr à ce sujet. Peut-être que c'est mon anxiété excessive.
Je dirais que c'est à peu près aussi propre qu'il l'obtient, donc pas besoin de "refactoring" ici.
Que faire si il n'y a plus d'une valeur minimale de la matrice? Voulez-vous le premier, le dernier, ou l'ensemble d'entre eux? BTW, je pense que cela vaut la peine d'être question.
Pouvez-vous mentionner les raisons pour lesquelles vous êtes à la recherche pour l'index en premier lieu? Si vous pouvez décrire le problème plus vaste, peut-être il ya une autre approche.
OriginalL'auteur kyrylo | 2011-02-11
Vous devez vous connecter pour publier un commentaire.
Ils sont à la fois documenté dans Énumérateur, le Tableau qui en hérite.
each.with_index
prend le tableau et ajoute un index pour elle de faire un tableau de tableaux, à l'intérieur des tableaux contenant les éléments d'origine, plus les indices. Ensuite, vous pouvez passer à d'autres transformateurs commemap
.each_with_index
veut effectuer une itération sur les tableaux de tableaux. C'est une différence subtile, mais je ne veux pas d'uneach
boucle, j'ai voulu transformer.Cet algorithme rendement sera faible ectremely
La question n'était pas sur la vitesse, c'était à propos d'autres façons d'accomplir quelque chose. Pourquoi en était-il sélectionné? Je ne sais pas.
OriginalL'auteur the Tin Man
Je crois que ça va parcourir le tableau qu'une seule fois et il est encore facile à lire:
Array#last
rend laid (ary.each_with_index.min.last
).Peut-être
ary.each_with_index.min.second
est plus joli.OriginalL'auteur andersonvom
Ce parcourt le tableau qu'une seule fois alors que
ary.index(ary.min)
traverserait deux fois:ary.index(ary.min)
est beaucoup plus simple à lire.OriginalL'auteur x17y19
En fait, j'aime @andersonvom 's réponse, il suffit de boucler le tableau une fois et toujours obtenir l'indice.
Et dans le cas où vous ne souhaitez pas utiliser
ary.each_with_index.min
, voici ce que vous pouvez faire:OriginalL'auteur Leo Liang