ค้นหา # รายการที่เกิดขึ้นของอักขระในสตริงใน Ruby


103

ฉันกำลังมองหาเมธอด Ruby (1.9 ... ) ที่สามารถช่วยฉันหาจำนวนครั้งที่เกิดขึ้นของอักขระในสตริง ฉันกำลังมองหาเหตุการณ์ทั้งหมดไม่ใช่แค่เหตุการณ์แรก

ตัวอย่างเช่น: "Melanie is a noob" มีอักษร "a" เกิดขึ้นสองครั้ง ฉันจะใช้วิธี Ruby เพื่อค้นหาสิ่งนี้ได้อย่างไร?

ฉันใช้Ruby-doc.orgเป็นข้อมูลอ้างอิงและเป็นscanวิธีที่String: classทำให้ฉันสะดุดตา scanถ้อยคำที่เป็นบิตยากสำหรับผมที่จะเข้าใจดังนั้นผมจึงไม่เข้าใจจริงๆแนวคิดของ

แก้ไข: ฉันสามารถแก้ปัญหานี้ได้โดยใช้scanไฟล์. ฉันแบ่งปันในวิดีโอว่าฉันประสบความสำเร็จได้อย่างไร


2
คุณต้องการจำนวนเหตุการณ์หรือค่าดัชนีของเหตุการณ์ที่เกิดขึ้นในสตริง? การรู้ว่ามีประโยชน์มากแค่ไหน แต่คำถามต่อไปคือ "พวกเขาอยู่ที่ไหน"
The Tin Man

คำตอบ:


143

หากคุณต้องการเพียงแค่จำนวน a:

puts "Melanie is a noob".count('a')  #=> 2

เอกสารสำหรับรายละเอียดเพิ่มเติม


18
ฉันจริงๆชอบคำตอบนี้จนผมสังเกตเห็นว่าคุณเพียงแค่เอาสตริงจากคำถามที่ยังคง :-) 1 แม้ว่า
Hubro

ทำไมมันไม่ทำงานกับจุด? ตัวอย่าง "voyage.localhost.com" .count ('www.') => 2. ได้อย่างไร?
Gediminas

12
@Gediminas countนับตัวอักษรไม่ใช่สตริง "voyage.localhost.com" .count ('www.') เหมือนกับ "voyage.localhost.com" .count ('w.') และเนื่องจากไม่มี w และจุดสองจุดผลลัพธ์จึงเป็น 2
steenslag

2
มีโอกาสเพิ่มลิงก์ไปยังเอกสารหรือไม่
คดีของ Fund Monica

2
ตอนแรกฉันค่อนข้างตกใจกับคำตอบนี้จากนั้นฉันก็เห็นว่าเมลานีใช้ตัวอย่างก่อน คำตอบที่ดี!
AJFaraday

52

ลิงก์จากคำถามที่ถามก่อนหน้านี้น่าจะช่วย สแกนสตริงใน Ruby

scan จะส่งคืนค่าที่เกิดขึ้นทั้งหมดของสตริงในสตริงเป็นอาร์เรย์ดังนั้น

"Melanie is a noob".scan(/a/)

จะกลับมา

["a","a"]

1
นี่คือคำตอบที่ฉันกำลังมองหา :)
Zippie

3
scanใช้งานได้กับ Strings แบบธรรมดาด้วยscan('a')เช่นกัน
Daniel Rikowski

1

ฉันสามารถแก้ปัญหานี้ได้โดยส่งสตริงผ่านscanดังที่แสดงในคำตอบอื่น

ตัวอย่างเช่น:

string = 'This is an example'
puts string.count('e')

ผลลัพธ์:

2

ฉันยังสามารถดึงเหตุการณ์ที่เกิดขึ้นโดยใช้การสแกนและส่งผ่านการต่อยแทน regex ซึ่งแตกต่างจากคำตอบอื่นเล็กน้อย แต่มีประโยชน์เพื่อหลีกเลี่ยง regex

string = 'This is an example'
puts string.scan('e')

ผลลัพธ์:

['e','e']

ฉันสำรวจวิธีการเหล่านี้เพิ่มเติมในวิดีโอแนะนำขนาดเล็กที่ฉันสร้างขึ้นหลังจากที่คิดออกแล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.