Przepraszam za tego typu pytanie, jestem tutaj nowicjuszem i uczę się korzystać z tego narzędzia, spróbuję znaleźć odpowiedzi przed wysłaniem tutaj.
Lucas Renan
107
Do wszystkich, którzy narzekają na tego typu pytania: przeczytaj FAQ: „Żadne pytanie nie jest zbyt trywialne lub zbyt„ nowicjusz ””. Jeśli nie podoba ci się to pytanie, nie odpowiadaj na nie i pozwól zrobić to komuś innemu. Jeśli pytanie zostało już zadane i udzielono na nie odpowiedzi, oznacz je jako duplikat. Ale nie ma powodu, by krytykować nowoprzybyłych za to, że są nowi.
Brian Campbell
Odpowiedzi:
118
Zgaduję, że próbujesz sprawdzić, czy w tablicy istnieje pewna wartość, a jeśli tak jest, możesz użyć Array # include? (Wartość):
a =[1,2,3,4,5]
a.include?(3)# => true
a.include?(9)# => false
Użyłbym indeksu Array #, ale sprawdzenie interfejsu API Ruby Array to świetna wskazówka.
Wylliam Judd
83
Użycie Array#selectda ci tablicę elementów spełniających kryteria. Ale jeśli szukasz sposobu na usunięcie elementu z tablicy, który spełnia Twoje kryteria, Enumerable#detectbyłby to lepszy sposób:
array =[1,2,3]
found = array.select {|e| e ==3}#=> [3]
found = array.detect {|e| e ==3}#=> 3
W przeciwnym razie musiałbyś zrobić coś niezręcznego, takiego jak:
Dzięki! Wiedziałem o tym, Enumerable#selectale #detectwłaśnie tego szukałem.
Justin Adkins,
1
array.select{}przejdzie przez wszystkie elementy w tablicy, szukając tych, które pasują do warunku. array.findzamiast tego zwróci pierwszy element spełniający warunek. Tak więc korzystne stosowanie array.find{ |e| e == 3 }następniearray.select{ |e| e == 3 }.first
Oscar Gonzalez
Myślę, że miałeś na myśli .find_index , że nie wiem, czy istnieje.find
Ross Attrill
28
Jeśli chcesz znaleźć jedną wartość z tablicy, użyj Array#find:
Aby sprawdzić, czy wartość istnieje w tablicy, możesz również użyć jej #in?podczas korzystania z ActiveSupport. #in?działa dla każdego obiektu, który reaguje na #include?:
@MarkThomas, proszę, zacytuj część mojej odpowiedzi, która Twoim zdaniem jest błędna, a ja chętnie ją zaktualizuję. Zakładam, że używamy tutaj angielskiego (nie zmyślonych definicji słów). A kiedy tysiące ludzi wyszukuje w Google hasło „ruby ZNAJDŹ wartość w tablicy”, widzą to pytanie jako pierwszy wynik, więc jestem pewien, że wszyscy chcieliby uzyskać poprawną odpowiedź.
Mike S
1
Co więcej, @MarkThomas, jeśli miałeś rację, to pytanie powinno zostać zamknięte, ponieważ jest duplikatem stackoverflow.com/questions/1986386/ ... , ale istnieje funkcjonalna różnica między „znajdowaniem” a „sprawdzaniem istnienia” w tablicy.
Mike S
Mam alergię na ludzi, którzy wskrzeszają stare pytania i dostarczają niewiele więcej treści. To się często zdarza. W twoim przypadku, mimo że selectzostała już udzielona jako odpowiedź w 2009 r., Podałeś przykładowy fragment kodu, który jest trochę lepszy. Więc po przemyśleniu tego, cofam to, co powiedziałem wcześniej.
Mark Thomas
8
Wiem, że na to pytanie już udzielono odpowiedzi, ale przyszedłem tutaj, szukając sposobu na filtrowanie elementów w tablicy na podstawie pewnych kryteriów. Oto przykład mojego rozwiązania: używając select, znajduję wszystkie stałe w klasie zaczynające się od „RUBY_”
Class.constants.select {|c| c.to_s =~/^RUBY_/}
AKTUALIZACJA: W międzyczasie odkryłem, że Array # grep działa znacznie lepiej. W powyższym przykładzie
Odpowiedzi:
Zgaduję, że próbujesz sprawdzić, czy w tablicy istnieje pewna wartość, a jeśli tak jest, możesz użyć Array # include? (Wartość):
Jeśli masz na myśli coś innego, sprawdź interfejs API Ruby Array
źródło
Użycie
Array#select
da ci tablicę elementów spełniających kryteria. Ale jeśli szukasz sposobu na usunięcie elementu z tablicy, który spełnia Twoje kryteria,Enumerable#detect
byłby to lepszy sposób:W przeciwnym razie musiałbyś zrobić coś niezręcznego, takiego jak:
źródło
Enumerable#select
ale#detect
właśnie tego szukałem.array.select{}
przejdzie przez wszystkie elementy w tablicy, szukając tych, które pasują do warunku.array.find
zamiast tego zwróci pierwszy element spełniający warunek. Tak więc korzystne stosowaniearray.find{ |e| e == 3 }
następniearray.select{ |e| e == 3 }.first
.find_index
, że nie wiem, czy istnieje.find
Jeśli chcesz znaleźć jedną wartość z tablicy, użyj
Array#find
:Zobacz też:
Aby sprawdzić, czy wartość istnieje w tablicy, możesz również użyć jej
#in?
podczas korzystania z ActiveSupport.#in?
działa dla każdego obiektu, który reaguje na#include?
:źródło
Array#find
w odniesieniach do Rubiego. To musi być sprawa Railsów, skoro inni o tym wspominali. Hmmm ...Enumerable
, ruby-doc.org/core-2.7.1/Enumerable.html#method-i-findLubię to?
lub tak?
Zobacz instrukcję .
źródło
w tym celu możesz użyć Array.select lub Array.index .
źródło
Posługiwać się:
myarray.index "valuetoFind"
To zwróci ci indeks żądanego elementu lub zero, jeśli twoja tablica nie zawiera wartości.
źródło
Ta odpowiedź jest dla każdego, kto zdaje sobie sprawę, że zaakceptowana odpowiedź nie odpowiada na pytanie tak, jak jest obecnie napisane.
Pytanie dotyczy tego, jak znaleźć wartość w tablicy. Zaakceptowana odpowiedź pokazuje, jak sprawdzić, czy wartość istnieje w tablicy.
Jest już przykład użycia
index
, więc podaję przykład przy użyciuselect
metody.źródło
select
została już udzielona jako odpowiedź w 2009 r., Podałeś przykładowy fragment kodu, który jest trochę lepszy. Więc po przemyśleniu tego, cofam to, co powiedziałem wcześniej.Wiem, że na to pytanie już udzielono odpowiedzi, ale przyszedłem tutaj, szukając sposobu na filtrowanie elementów w tablicy na podstawie pewnych kryteriów. Oto przykład mojego rozwiązania: używając
select
, znajduję wszystkie stałe w klasie zaczynające się od „RUBY_”AKTUALIZACJA: W międzyczasie odkryłem, że Array # grep działa znacznie lepiej. W powyższym przykładzie
załatwił sprawę.
źródło
Class.constants.grep /^RUBY_/
załatwił sprawę.Dzięki za odpowiedzi.
Podobało mi się to:
źródło
Możesz przejść do metod tablicowych.
Aby zobaczyć wszystkie metody tablicowe, użyj
methods
funkcji function z tablicą. Na przykład,Przy okazji możesz użyć innej metody sprawdzania wartości w tablicy Możesz użyć
a.include?("name")
.źródło