ใน Ruby ฉันจะหาค่าในอาร์เรย์ได้อย่างไร
ใน Ruby ฉันจะหาค่าในอาร์เรย์ได้อย่างไร
คำตอบ:
ฉันคาดเดาว่าคุณกำลังพยายามค้นหาว่ามีค่าบางอย่างอยู่ในอาร์เรย์หรือไม่และหากเป็นเช่นนั้นคุณสามารถใช้ Array # include? (value):
a = [1,2,3,4,5]
a.include?(3) # => true
a.include?(9) # => false
หากคุณหมายถึงอย่างอื่นให้ตรวจสอบRuby Array API
การใช้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
หากต้องการดูว่ามีค่าอยู่ใน Array หรือไม่คุณสามารถใช้#in?
เมื่อใช้ ActiveSupport #in?
ทำงานสำหรับวัตถุใด ๆ ที่ตอบสนองต่อ#include?
:
arr = [1, 6]
6.in? arr #=> true
Array#find
ในการอ้างอิง Ruby ต้องเป็นสิ่งที่ Rails เนื่องจากมีคนกล่าวถึง อืม ....
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 แต่คุณได้ให้ข้อมูลโค้ดตัวอย่างซึ่งดีกว่าเล็กน้อย ดังนั้นหลังจากคิดใหม่แล้วฉันก็ถอนสิ่งที่พูดไปก่อนหน้านี้
ฉันรู้ว่าคำถามนี้ได้รับคำตอบแล้ว แต่ฉันมาที่นี่เพื่อหาวิธีกรององค์ประกอบใน Array ตามเกณฑ์บางอย่าง นี่คือตัวอย่างการแก้ปัญหาของฉัน: โดยใช้select
ฉันพบค่าคงที่ทั้งหมดในคลาสที่ขึ้นต้นด้วย "RUBY_"
Class.constants.select {|c| c.to_s =~ /^RUBY_/ }
UPDATE:ในระหว่างนี้ฉันได้ค้นพบว่า 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")
ใช้ได้