Désolé pour ce type de question, je suis novice ici, et j'apprends à utiliser cet outil, je vais essayer de trouver les réponses avant de poster ici.
Lucas Renan
107
A tous ceux qui se plaignent de ce genre de question: veuillez lire la FAQ: 'Aucune question n'est trop triviale ou trop "newbie" ". Si vous n'aimez pas la question, n'y répondez pas et laissez quelqu'un d'autre le faire. Si la question a déjà été posée et répondue sur SO, alors bien sûr, marquez-la comme un double. Mais il n'y a aucune raison de réprimander les nouveaux venus parce qu'ils sont nouveaux.
Brian Campbell
Réponses:
117
J'imagine que vous essayez de trouver si une certaine valeur existe dans le tableau, et si c'est le cas, vous pouvez utiliser Array # include? (Valeur):
a =[1,2,3,4,5]
a.include?(3)# => true
a.include?(9)# => false
Si vous voulez dire autre chose, vérifiez l' API Ruby Array
J'utiliserais l'index Array #, mais vérifier l'API Ruby Array est un excellent conseil.
Wylliam Judd
82
L'utilisation Array#selectvous donnera un tableau d'éléments qui répondent aux critères. Mais si vous cherchez un moyen d'extraire l'élément du tableau qui répond à vos critères, ce Enumerable#detectserait une meilleure façon de procéder:
array =[1,2,3]
found = array.select {|e| e ==3}#=> [3]
found = array.detect {|e| e ==3}#=> 3
Sinon, vous devrez faire quelque chose de maladroit comme:
Merci! Je savais Enumerable#selectmais #detectc'est exactement ce que je cherchais.
Justin Adkins
1
array.select{}parcourra tous les éléments du tableau en recherchant ceux qui correspondent à la condition. array.findà la place retournera le premier élément qui correspond à la condition. Utilisation si préférable array.find{ |e| e == 3 }alorsarray.select{ |e| e == 3 }.first
Oscar Gonzalez
Je pense que vous vouliez dire que .find_index je ne sais pas s'il y en a.find
Ross Attrill
27
Si vous voulez trouver une valeur à partir du tableau, utilisez Array#find:
Pour savoir si une valeur existe dans un tableau, vous pouvez également l'utiliser #in?lors de l'utilisation d'ActiveSupport. #in?fonctionne pour tout objet qui répond à #include?:
@MarkThomas veuillez citer la partie de ma réponse que vous prétendez être une déclaration incorrecte et je la mettrai à jour avec plaisir. Je suppose que nous utilisons l'anglais ici (pas de définitions inventées pour les mots). Et lorsque des milliers de personnes recherchent "ruby FIND value in array" dans Google, elles voient cette question comme le premier résultat, donc je suis sûr qu'ils aimeraient tous obtenir la bonne réponse.
Mike S
1
De plus, @MarkThomas si vous aviez raison, cette question devrait être fermée car elle est une duplication de stackoverflow.com/questions/1986386/... , mais il existe une différence fonctionnelle entre "trouver" et "vérifier l'existence" dans un tableau.
Mike S
Je suis allergique aux gens qui ressuscitent de vieilles questions et fournissent peu ou pas de substance. Cela arrive souvent. Dans votre cas, bien que cela selectait déjà été fourni comme réponse en 2009, vous avez fourni un extrait de code qui est un peu meilleur. Alors après y avoir repensé, je rétracte ce que j'ai dit plus tôt.
Mark Thomas
8
Je sais que cette question a déjà reçu une réponse, mais je suis venu ici à la recherche d'un moyen de filtrer les éléments d'un tableau en fonction de certains critères. Voici donc mon exemple de solution: en utilisant select, je trouve toutes les constantes de Class qui commencent par "RUBY_"
Class.constants.select {|c| c.to_s =~/^RUBY_/}
MISE À JOUR: En attendant, j'ai découvert que Array # grep fonctionne beaucoup mieux. Pour l'exemple ci-dessus,
Réponses:
J'imagine que vous essayez de trouver si une certaine valeur existe dans le tableau, et si c'est le cas, vous pouvez utiliser Array # include? (Valeur):
Si vous voulez dire autre chose, vérifiez l' API Ruby Array
la source
L'utilisation
Array#select
vous donnera un tableau d'éléments qui répondent aux critères. Mais si vous cherchez un moyen d'extraire l'élément du tableau qui répond à vos critères, ceEnumerable#detect
serait une meilleure façon de procéder:Sinon, vous devrez faire quelque chose de maladroit comme:
la source
Enumerable#select
mais#detect
c'est exactement ce que je cherchais.array.select{}
parcourra tous les éléments du tableau en recherchant ceux qui correspondent à la condition.array.find
à la place retournera le premier élément qui correspond à la condition. Utilisation si préférablearray.find{ |e| e == 3 }
alorsarray.select{ |e| e == 3 }.first
.find_index
je ne sais pas s'il y en a.find
Si vous voulez trouver une valeur à partir du tableau, utilisez
Array#find
:Voir également:
Pour savoir si une valeur existe dans un tableau, vous pouvez également l'utiliser
#in?
lors de l'utilisation d'ActiveSupport.#in?
fonctionne pour tout objet qui répond à#include?
:la source
Array#find
dans les références Ruby. Ça doit être un truc Rails puisque d'autres personnes l'ont mentionné. Hmmm ....Enumerable
, ruby-doc.org/core-2.7.1/Enumerable.html#method-i-findComme ça?
ou comme ça?
Consultez le manuel .
la source
vous pouvez utiliser Array.select ou Array.index pour ce faire.
la source
Utilisation:
myarray.index "valuetoFind"
Cela vous renverra l'index de l'élément souhaité ou nul si votre tableau ne contient pas la valeur.
la source
Cette réponse est pour tous ceux qui réalisent que la réponse acceptée ne répond pas à la question telle qu'elle est actuellement écrite.
La question demande comment trouver une valeur dans un tableau. La réponse acceptée montre comment vérifier si une valeur existe dans un tableau.
Il existe déjà un exemple utilisant
index
, donc je donne un exemple utilisant laselect
méthode.la source
select
ait déjà été fourni comme réponse en 2009, vous avez fourni un extrait de code qui est un peu meilleur. Alors après y avoir repensé, je rétracte ce que j'ai dit plus tôt.Je sais que cette question a déjà reçu une réponse, mais je suis venu ici à la recherche d'un moyen de filtrer les éléments d'un tableau en fonction de certains critères. Voici donc mon exemple de solution: en utilisant
select
, je trouve toutes les constantes de Class qui commencent par "RUBY_"MISE À JOUR: En attendant, j'ai découvert que Array # grep fonctionne beaucoup mieux. Pour l'exemple ci-dessus,
a fait l'affaire.
la source
Class.constants.grep /^RUBY_/
fait l'affaire.Merci pour les réponses.
J'ai aimé ceci:
la source
Vous pouvez opter pour des méthodes de tableau.
Pour voir toutes les méthodes de tableau, utilisez la
methods
fonction avec tableau. Par exemple,Par ailleurs, vous pouvez utiliser une méthode différente pour vérifier la valeur dans le tableau que vous pouvez utiliser
a.include?("name")
.la source