W Rubim, jak mogę znaleźć wartość w tablicy?
W Rubim, jak mogę znaleźć wartość w tablicy?
Odpowiedzi:
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
Jeśli masz na myśli coś innego, sprawdź interfejs API Ruby Array
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:
found = array.select {|e| e == 3}.first
Enumerable#selectale #detectwłaśnie tego szukałem.
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
.find_index , że nie wiem, czy istnieje.find
Jeśli chcesz znaleźć jedną wartość z tablicy, użyj Array#find:
arr = [1,2,6,4,9]
arr.find {|e| e%3 == 0} #=> 6
Zobacz też:
arr.select {|e| e%3 == 0} #=> [ 6, 9 ]
e.include? 6 #=> true
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?:
arr = [1, 6]
6.in? arr #=> true
Array#findw 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-find
Lubię to?
a = [ "a", "b", "c", "d", "e" ]
a[2] + a[0] + a[1] #=> "cab"
a[6] #=> nil
a[1, 2] #=> [ "b", "c" ]
a[1..3] #=> [ "b", "c", "d" ]
a[4..7] #=> [ "e" ]
a[6..10] #=> nil
a[-3, 3] #=> [ "c", "d", "e" ]
# special cases
a[5] #=> nil
a[5, 1] #=> []
a[5..10] #=> []
lub tak?
a = [ "a", "b", "c" ]
a.index("b") #=> 1
a.index("z") #=> nil
w tym celu możesz użyć Array.select lub Array.index .
Posługiwać się:
myarray.index "valuetoFind"
To zwróci ci indeks żądanego elementu lub zero, jeśli twoja tablica nie zawiera wartości.
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życiu selectmetody.
1.9.3-p327 :012 > x = [1,2,3,4,5]
=> [1, 2, 3, 4, 5]
1.9.3-p327 :013 > x.select {|y| y == 1}
=> [1]
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.
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
Class.constants.grep /^RUBY_/
załatwił sprawę.
Class.constants.grep /^RUBY_/załatwił sprawę.
Dzięki za odpowiedzi.
Podobało mi się to:
puts 'find' if array.include?(value)
Możesz przejść do metod tablicowych.
Aby zobaczyć wszystkie metody tablicowe, użyj methodsfunkcji function z tablicą. Na przykład,
a = ["name", "surname"]
a.methods
Przy okazji możesz użyć innej metody sprawdzania wartości w tablicy Możesz użyć a.include?("name").