Trong Ruby, làm cách nào để tìm một giá trị trong một mảng?
Trong Ruby, làm cách nào để tìm một giá trị trong một mảng?
Câu trả lời:
Tôi đoán rằng bạn đang cố gắng tìm xem một giá trị nhất định có tồn tại bên trong mảng hay không và nếu đúng như vậy, bạn có thể sử dụng Array # include? (Value):
a = [1,2,3,4,5]
a.include?(3) # => true
a.include?(9) # => false
Nếu bạn muốn nói điều gì khác, hãy kiểm tra API Ruby Array
Việc sử dụng Array#select
sẽ cung cấp cho bạn một mảng các phần tử đáp ứng các tiêu chí. Nhưng nếu bạn đang tìm cách đưa phần tử ra khỏi mảng đáp ứng tiêu chí của mình, Enumerable#detect
thì cách tốt hơn là:
array = [1,2,3]
found = array.select {|e| e == 3} #=> [3]
found = array.detect {|e| e == 3} #=> 3
Nếu không, bạn sẽ phải làm điều gì đó khó xử như:
found = array.select {|e| e == 3}.first
Enumerable#select
nhưng đó #detect
chính xác là những gì tôi đang tìm kiếm.
array.select{}
sẽ đi qua tất cả các phần tử trong mảng để tìm kiếm những phần tử phù hợp với điều kiện. array.find
thay vào đó sẽ trả về phần tử đầu tiên phù hợp với điều kiện. Vì vậy, sử dụng thích hợp hơn array.find{ |e| e == 3 }
sau đóarray.select{ |e| e == 3 }.first
.find_index
tôi không biết nếu có bất kỳ.find
Nếu bạn muốn tìm một giá trị từ mảng, hãy sử dụng Array#find
:
arr = [1,2,6,4,9]
arr.find {|e| e%3 == 0} #=> 6
Xem thêm:
arr.select {|e| e%3 == 0} #=> [ 6, 9 ]
e.include? 6 #=> true
Để tìm xem một giá trị có tồn tại trong Mảng hay không, bạn cũng có thể sử dụng #in?
khi sử dụng ActiveSupport. #in?
hoạt động cho bất kỳ đối tượng nào đáp ứng #include?
:
arr = [1, 6]
6.in? arr #=> true
Array#find
trong các tham chiếu Ruby. Phải là một thứ Rails vì những người khác đã đề cập đến nó. Hmmm ....
Enumerable
, ruby-doc.org/core-2.7.1/Enumerable.html#method-i-find
Như thế này?
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] #=> []
hay như thế này?
a = [ "a", "b", "c" ]
a.index("b") #=> 1
a.index("z") #=> nil
bạn có thể sử dụng Array.select hoặc Array.index để làm điều đó.
Sử dụng:
myarray.index "valuetoFind"
Điều đó sẽ trả về cho bạn chỉ mục của phần tử bạn muốn hoặc nil nếu mảng của bạn không chứa giá trị.
Câu trả lời này dành cho tất cả mọi người nhận ra rằng câu trả lời được chấp nhận không giải quyết câu hỏi như nó được viết hiện tại.
Câu hỏi hỏi cách tìm một giá trị trong một mảng. Câu trả lời được chấp nhận cho biết cách kiểm tra xem một giá trị có tồn tại trong một mảng hay không.
Đã có một ví dụ sử dụng index
, vì vậy tôi đang cung cấp một ví dụ bằng cách sử dụng select
phương pháp này.
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
đã được cung cấp dưới dạng câu trả lời vào năm 2009, nhưng bạn đã cung cấp một đoạn mã mẫu tốt hơn một chút. Vì vậy, sau khi suy nghĩ lại, tôi rút lại những gì đã nói trước đó.
Tôi biết câu hỏi này đã được trả lời, nhưng tôi đến đây để tìm cách lọc các phần tử trong Mảng dựa trên một số tiêu chí. Vì vậy, đây là ví dụ giải pháp của tôi: sử dụng select
, tôi tìm thấy tất cả các hằng số trong Lớp bắt đầu bằng "RUBY_"
Class.constants.select {|c| c.to_s =~ /^RUBY_/ }
CẬP NHẬT: Trong thời gian chờ đợi, tôi đã phát hiện ra rằng Mảng # grep hoạt động tốt hơn nhiều. Đối với ví dụ trên,
Class.constants.grep /^RUBY_/
đã lừa.
Class.constants.grep /^RUBY_/
đã thực hiện thủ thuật.
Cảm ơn đã trả lời.
Tôi đã làm như thế này:
puts 'find' if array.include?(value)
Bạn có thể sử dụng các phương thức mảng.
Để xem tất cả các phương thức mảng, hãy sử dụng methods
hàm với mảng. Ví dụ,
a = ["name", "surname"]
a.methods
Bằng cách này, bạn có thể sử dụng phương pháp khác để kiểm tra giá trị trong mảng Bạn có thể sử dụng a.include?("name")
.