ใน 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")ใช้ได้