มาพูดถึง grep
. กัน วิธีการ
วิธีนี้ช่วยอะไรคุณได้บ้าง
คุณสามารถใช้ Grep เพื่อกรองวัตถุที่นับได้ เช่น Arrays &Ranges
“แต่การเลือกทำอย่างนั้นแล้ว!”
ใช่ แต่ grep ทำงานในแบบที่ต่างออกไป &ให้ผลลัพธ์ที่แตกต่างกัน
มาดูตัวอย่างกัน
ตัวอย่างวิธีการ Ruby Grep
รับอาร์เรย์นี้:
objects = ["a", "b", "c", 1, 2, 3, nil]
คุณสามารถใช้ grep เพื่อรับเฉพาะสตริงได้ :
objects.grep(String) # ["a", "b", "c"]
เฉพาะจำนวนเต็ม:
objects.grep(Integer) # [1, 2, 3]
หรือทุกอย่างที่ไม่เป็นศูนย์ :
objects.grep_v(NilClass) # ["a", "b", "c", 1, 2, 3]
หากคุณมีอาร์เรย์ของคำ:
fruit = ["apple", "orange", "banana"]
คุณสามารถค้นหาคำทั้งหมดที่ขึ้นต้นด้วย “a”:
fruit.grep(/^a/) # ["apple"]
หรือลงท้ายด้วย “e” :
fruit.grep(/e$/) # ["apple", "orange"]
และถ้าคุณมีรายการตัวเลข:
numbers = [9, 10, 11, 20]
คุณสามารถรับรายการตัวเลขทั้งหมดภายในช่วง :
numbers.grep(5..10) # [9, 10]
คุณสามารถรวมวิธีการแผนที่และเลือกเป็นหนึ่งเดียวเมื่อคุณใช้บล็อก:
numbers.grep(5..10) { |n| n * 2 } # [18, 20]
ถ้าอยากได้แฟนซี…
times_two = ->(x) { x * 2 } numbers.grep(5..10, ×_two) # [18, 20]
เจ๋งมากใช่มั้ย
Grep vs Select:การทำความเข้าใจความแตกต่าง
grep ทำงานอย่างไร
เคล็ดลับอยู่ที่ ===
วิธี (สามเท่า) ใน Ruby
Grep เรียกวิธีนี้ในอาร์กิวเมนต์ใดก็ตามที่คุณส่งผ่าน
และปรากฎว่าคลาส นิพจน์ทั่วไป &ช่วงทั้งหมดใช้ ===
.
พวกเขาใช้วิธีนี้ในลักษณะที่เหมาะสมกับชั้นเรียน
ตัวอย่างเช่น :
- คลาส (เช่น
Integer
หรือArray
) เปรียบเทียบกับคลาสอ็อบเจ็กต์ที่กำหนด - พิสัยจะตรวจสอบว่าตัวเลขนั้นอยู่ในช่วงนั้นหรือไม่
- นิพจน์ทั่วไปตรวจสอบว่ามีการจับคู่หรือไม่
ดังนั้นเมื่อคุณพูด :
objects.grep(Integer)
สิ่งที่คุณพูดจริงๆ คือ :
objects.select { |obj| Integer === obj }
ฉันสับสนเกี่ยวกับ grep มาเป็นเวลานาน…
กว่าฉันจะเข้าใจสิ่งนี้
select
วิธีการกรองรายการตามผลของการบล็อก
หากบล็อกประเมินว่าเป็นจริง องค์ประกอบนั้นจะถูกเลือก
แต่ grep
เพียงเปรียบเทียบสองสิ่งโดยใช้ ===
.
คุณสามารถพูดได้ว่า grep เป็นเวอร์ชันเฉพาะของ select !
แผนที่ความคิด Ruby Grep
ชมวิดีโอการสอน
สรุป
คุณได้เรียนรู้เกี่ยวกับวิธีการ grep ใน Ruby! เป็นวิธีที่มีประโยชน์มากเมื่อคุณเข้าใจวิธีการทำงาน
อย่าลืมฝึกฝนเพื่อให้สิ่งนี้จมลงไป
การฝึกฝนคือกุญแจสู่ความเชี่ยวชาญ!