Як я можу знайти значення в масиві в Ruby?
Як я можу знайти значення в масиві в Ruby?
Відповіді:
Я здогадуюсь, що ви намагаєтеся знайти, чи існує певне значення всередині масиву, і якщо це так, ви можете використовувати Array # include? (Value):
a = [1,2,3,4,5]
a.include?(3) # => true
a.include?(9) # => false
Якщо ви маєте на увазі щось інше, перевірте API Ruby Array
Використання Array#select
надасть вам масив елементів, що відповідають критеріям. Але якщо ви шукаєте спосіб вивести елемент з масиву, який відповідає вашим критеріям, Enumerable#detect
це буде кращим способом:
array = [1,2,3]
found = array.select {|e| e == 3} #=> [3]
found = array.detect {|e| e == 3} #=> 3
Інакше вам доведеться зробити щось незручне, як-от:
found = array.select {|e| e == 3}.first
Enumerable#select
але #detect
саме це я шукав.
array.select{}
буде проходити всі елементи в масиві, шукаючи ті, які відповідають умові. array.find
натомість поверне перший елемент, який відповідає умові. Тож переважніше використання array.find{ |e| e == 3 }
тодіarray.select{ |e| e == 3 }.first
.find_index
я не знаю, чи є такий.find
Якщо ви хочете знайти одне значення з масиву, використовуйте Array#find
:
arr = [1,2,6,4,9]
arr.find {|e| e%3 == 0} #=> 6
Дивитися також:
arr.select {|e| e%3 == 0} #=> [ 6, 9 ]
e.include? 6 #=> true
Щоб дізнатись, чи існує значення в масиві, ви також можете використовувати #in?
під час використання ActiveSupport. #in?
працює для будь-якого об'єкта, який відповідає #include?
:
arr = [1, 6]
6.in? arr #=> true
Array#find
у посиланнях на Ruby. Це повинно бути річкою, оскільки інші люди згадували про це.
Enumerable
, ruby-doc.org/core-2.7.1/Enumerable.html#method-i-find
Подобається це?
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] #=> []
чи як це?
a = [ "a", "b", "c" ]
a.index("b") #=> 1
a.index("z") #=> nil
Ви можете використовувати Array.select або Array.index , щоб зробити це.
Використання:
myarray.index "valuetoFind"
Це поверне вам індекс потрібного елемента або нуль, якщо масив не містить значення.
Ця відповідь призначена для всіх, хто усвідомив прийняту відповідь, не вирішує питання, як написано в даний час.
Питання задає питання, як знайти значення в масиві. Прийнята відповідь показує, як перевірити, чи існує значення в масиві.
Вже є приклад використання index
, тому я надаю приклад з використанням select
методу.
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]
select
це вже було надано як відповідь у 2009 році, ви навели фрагмент зразка, який трохи краще. Отож, переосмисливши це, я відкликаю те, що говорив раніше.
Я знаю, що на це питання вже відповіли, але я прийшов сюди, шукаючи спосіб фільтрувати елементи в масиві на основі деяких критеріїв. Тож ось мій приклад рішення: використовуючи select
, я знаходжу всі константи класу, які починаються з "RUBY_"
Class.constants.select {|c| c.to_s =~ /^RUBY_/ }
ОНОВЛЕННЯ: Тим часом я виявив, що Array # grep працює набагато краще. Для наведеного вище прикладу,
Class.constants.grep /^RUBY_/
зробив трюк.
Class.constants.grep /^RUBY_/
зробив трюк.
Дякуємо за відповіді.
Мені було так:
puts 'find' if array.include?(value)
Можна перейти до методів масиву.
Щоб побачити всі методи масиву, використовуйте methods
функцію з масивом. Наприклад,
a = ["name", "surname"]
a.methods
До речі, ви можете використовувати інший метод для перевірки значення в масиві, який ви можете використовувати a.include?("name")
.