Entschuldigung für diese Art von Frage, ich bin Neuling hier und lerne, dieses Tool zu verwenden. Ich werde versuchen, die Antworten zu finden, bevor ich hier poste.
Lucas Renan
107
An alle, die sich über diese Art von Frage beschweren: Bitte lesen Sie die FAQ: "Keine Frage ist zu trivial oder zu" Neuling "." Wenn Ihnen die Frage nicht gefällt, beantworten Sie sie nicht und lassen Sie dies von jemand anderem tun. Wenn die Frage bereits auf SO gestellt und beantwortet wurde, markieren Sie sie sicher als Duplikat. Aber es gibt keinen Grund, die Neuankömmlinge dafür zu beschimpfen, dass sie neu sind.
Brian Campbell
Antworten:
117
Ich vermute, Sie versuchen herauszufinden, ob ein bestimmter Wert im Array vorhanden ist, und wenn dies der Fall ist, können Sie Array # include? (Wert) verwenden:
a =[1,2,3,4,5]
a.include?(3)# => true
a.include?(9)# => false
Wenn Sie etwas anderes meinen, überprüfen Sie die Ruby Array-API
Ich würde den Array # -Index verwenden, aber das Überprüfen der Ruby Array-API ist ein guter Tipp.
Wylliam Judd
82
Wenn Array#selectSie verwenden, erhalten Sie eine Reihe von Elementen, die die Kriterien erfüllen. Wenn Sie jedoch nach einer Möglichkeit suchen, das Element aus dem Array herauszuholen, das Ihren Kriterien entspricht, ist Enumerable#detectdies ein besserer Weg:
array =[1,2,3]
found = array.select {|e| e ==3}#=> [3]
found = array.detect {|e| e ==3}#=> 3
Andernfalls müssten Sie etwas Unangenehmes tun wie:
Vielen Dank! Ich wusste davon, Enumerable#selectaber es #detectist genau das, wonach ich gesucht habe.
Justin Adkins
1
array.select{}Durchläuft alle Elemente im Array und sucht nach Elementen, die der Bedingung entsprechen. array.findStattdessen wird das erste Element zurückgegeben, das der Bedingung entspricht. So bevorzugt Verwendung array.find{ |e| e == 3 }dannarray.select{ |e| e == 3 }.first
Oscar Gonzalez
Ich denke, Sie meinten, .find_index ich weiß nicht, ob es welche gibt.find
Ross Attrill
25
Wenn Sie einen Wert aus dem Array suchen möchten, verwenden Sie Array#find:
Um festzustellen, ob ein Wert in einem Array vorhanden ist, können Sie auch #in?ActiveSupport verwenden. #in?funktioniert für jedes Objekt, das reagiert auf #include?:
@ MarkThomas Bitte zitieren Sie den Teil meiner Antwort, von dem Sie behaupten, dass er eine falsche Aussage ist, und ich werde ihn gerne aktualisieren. Ich gehe davon aus, dass wir hier Englisch verwenden (keine erfundenen Definitionen für Wörter). Und wenn Tausende von Menschen in Google nach "Ruby FIND value in array" suchen, sehen sie diese Frage als erstes Ergebnis. Ich bin sicher, dass sie alle gerne die richtige Antwort erhalten würden.
Mike S
1
@MarkThomas Wenn Sie korrekt waren, sollte diese Frage geschlossen werden, da sie ein Duplikat von stackoverflow.com/questions/1986386/… ist. Es gibt jedoch einen funktionalen Unterschied zwischen "Finden" und "Überprüfen auf Existenz" in einem Array.
Mike S
Ich bin allergisch gegen Leute, die alte Fragen wieder aufleben lassen und wenig bis gar keine Substanz mehr liefern. Das passiert sehr oft. In Ihrem Fall haben Sie, obwohl dies selectbereits 2009 als Antwort bereitgestellt wurde, ein Beispiel-Snippet bereitgestellt, das etwas besser ist. Nachdem ich es überdacht habe, ziehe ich das zurück, was ich zuvor gesagt habe.
Mark Thomas
8
Ich weiß, dass diese Frage bereits beantwortet wurde, aber ich bin hierher gekommen, um nach einer Möglichkeit zu suchen, Elemente in einem Array anhand einiger Kriterien zu filtern. Hier ist mein Lösungsbeispiel: Mit selectfinde ich alle Konstanten in der Klasse, die mit "RUBY_" beginnen.
Class.constants.select {|c| c.to_s =~/^RUBY_/}
UPDATE: In der Zwischenzeit habe ich festgestellt, dass Array # grep viel besser funktioniert. Für das obige Beispiel
In der Zwischenzeit habe ich festgestellt, dass Array # grep viel besser funktioniert. Auch für das obige Beispiel Class.constants.grep /^RUBY_/hat der Trick getan.
Antworten:
Ich vermute, Sie versuchen herauszufinden, ob ein bestimmter Wert im Array vorhanden ist, und wenn dies der Fall ist, können Sie Array # include? (Wert) verwenden:
Wenn Sie etwas anderes meinen, überprüfen Sie die Ruby Array-API
quelle
Wenn
Array#select
Sie verwenden, erhalten Sie eine Reihe von Elementen, die die Kriterien erfüllen. Wenn Sie jedoch nach einer Möglichkeit suchen, das Element aus dem Array herauszuholen, das Ihren Kriterien entspricht, istEnumerable#detect
dies ein besserer Weg:Andernfalls müssten Sie etwas Unangenehmes tun wie:
quelle
Enumerable#select
aber es#detect
ist genau das, wonach ich gesucht habe.array.select{}
Durchläuft alle Elemente im Array und sucht nach Elementen, die der Bedingung entsprechen.array.find
Stattdessen wird das erste Element zurückgegeben, das der Bedingung entspricht. So bevorzugt Verwendungarray.find{ |e| e == 3 }
dannarray.select{ |e| e == 3 }.first
.find_index
ich weiß nicht, ob es welche gibt.find
Wenn Sie einen Wert aus dem Array suchen möchten, verwenden Sie
Array#find
:Siehe auch:
Um festzustellen, ob ein Wert in einem Array vorhanden ist, können Sie auch
#in?
ActiveSupport verwenden.#in?
funktioniert für jedes Objekt, das reagiert auf#include?
:quelle
Array#find
in den Ruby-Referenzen sehen. Muss eine Rails-Sache sein, da andere Leute es erwähnt haben. Hmmm ....Enumerable
, ruby-doc.org/core-2.7.1/Enumerable.html#method-i-findSo was?
oder so?
Siehe das Handbuch .
quelle
Sie können dazu Array.select oder Array.index verwenden.
quelle
Verwenden:
myarray.index "valuetoFind"
Dadurch erhalten Sie den Index des gewünschten Elements oder null, wenn Ihr Array den Wert nicht enthält.
quelle
Diese Antwort richtet sich an alle, die erkennen, dass die akzeptierte Antwort die aktuell geschriebene Frage nicht beantwortet.
Die Frage stellt , wie man findet Wert in einem Array. Die akzeptierte Antwort zeigt , wie Sie überprüfen , ob ein Wert existiert in einem Array.
Es gibt bereits ein Beispiel mit
index
, daher gebe ich ein Beispiel mit derselect
Methode.quelle
select
bereits 2009 als Antwort bereitgestellt wurde, ein Beispiel-Snippet bereitgestellt, das etwas besser ist. Nachdem ich es überdacht habe, ziehe ich das zurück, was ich zuvor gesagt habe.Ich weiß, dass diese Frage bereits beantwortet wurde, aber ich bin hierher gekommen, um nach einer Möglichkeit zu suchen, Elemente in einem Array anhand einiger Kriterien zu filtern. Hier ist mein Lösungsbeispiel: Mit
select
finde ich alle Konstanten in der Klasse, die mit "RUBY_" beginnen.UPDATE: In der Zwischenzeit habe ich festgestellt, dass Array # grep viel besser funktioniert. Für das obige Beispiel
hat den Trick gemacht.
quelle
Class.constants.grep /^RUBY_/
hat der Trick getan.Danke für die Antworten.
Mir hat das gefallen:
quelle
Sie können Array-Methoden wählen.
Um alle Array-Methoden anzuzeigen, verwenden Sie die
methods
Funktion mit Array. Beispielsweise,Übrigens können Sie verschiedene Methoden zum Überprüfen des Werts im Array verwenden
a.include?("name")
.quelle