วิธีการแยกสตริงที่มีตัวคั่นใน Ruby และแปลงเป็นอาเรย์?


คำตอบ:


412
>> "1,2,3,4".split(",")
=> ["1", "2", "3", "4"]

หรือสำหรับจำนวนเต็ม:

>> "1,2,3,4".split(",").map { |s| s.to_i }
=> [1, 2, 3, 4]

หรือสำหรับ ruby ​​รุ่นใหม่กว่า (> = 1.9 - ตามที่ Alex แนะนำ):

>> "1,2,3,4".split(",").map(&:to_i)
=> [1, 2, 3, 4]

28
จำไว้ว่าถ้าคุณใช้> = 1.9 คุณสามารถใช้ "1,2,3,4" .split (','). map (: to_i)
Alex Fort

7
หากคุณใช้การสนับสนุนที่ใช้งานอยู่คุณสามารถทำได้: map (&: to_i)
jonnii


19

สำหรับString Integerไม่มีที่ว่างเหมือนString

arr = "12345"

arr.split('')

output: ["1","2","3","4","5"]

สำหรับString Integerมีพื้นที่ว่างเป็นString

arr = "1 2 3 4 5"

arr.split(' ')

output: ["1","2","3","4","5"]

สำหรับString Integerไม่มีที่ว่างเหมือนInteger

arr = "12345"

arr.split('').map(&:to_i)

output: [1,2,3,4,5]

สำหรับ String

arr = "abc"

arr.split('')

output: ["a","b","c"]

คำอธิบาย :

  1. arr -> สายอักขระที่คุณจะต้องดำเนินการใด ๆ
  2. split() -> เป็นวิธีที่แยกอินพุตและเก็บเป็นอาร์เรย์
  3. ''หรือ' 'หรือ','-> เป็นค่าซึ่งจำเป็นต้องถูกลบออกจากสตริงที่กำหนด

1

วิธีที่ง่ายที่สุดในการแปลงสตริงที่มีตัวคั่นเหมือนเครื่องหมายจุลภาคคือใช้วิธีแยกเท่านั้น

"1,2,3,4".split(',') # "1", "2", "3", "4"]

คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้วิธีการแยกในเอกสารทับทิม

แบ่ง str เป็นสตริงย่อยโดยอิงจากตัวคั่นส่งคืนอาร์เรย์ของสตริงย่อยเหล่านี้

หาก pattern เป็น String เนื้อหาจะถูกใช้เป็นตัวคั่นเมื่อแยก str หากรูปแบบเป็นช่องว่างเดียว str จะถูกแยกบนช่องว่างโดยที่ช่องว่างนำหน้าและเรียกใช้อักขระช่องว่างต่อเนื่องที่ละเว้น

ถ้า pattern เป็น Regexp, str จะถูกแบ่งโดยที่ pattern ตรงกัน เมื่อใดก็ตามที่รูปแบบตรงกับสตริงที่มีความยาวเป็นศูนย์ str จะถูกแบ่งออกเป็นอักขระแต่ละตัว หากรูปแบบมีกลุ่มการจับคู่ที่เกี่ยวข้องจะถูกส่งคืนในอาร์เรย์เช่นกัน

หากละเว้นรูปแบบค่าของ $; ถูกนำมาใช้. ถ้า $; เป็นศูนย์ (ซึ่งเป็นค่าเริ่มต้น) str ถูกแบ่งบนช่องว่างราวกับว่ามีการระบุ `'

หากไม่ระบุพารามิเตอร์ limit ฟิลด์การติดตาม null จะถูกระงับ ถ้า limit เป็นจำนวนบวกจำนวนฟิลด์ส่วนใหญ่จะถูกส่งคืน (ถ้า จำกัด เป็น 1 สตริงทั้งหมดจะถูกส่งคืนเป็นรายการเดียวในอาร์เรย์) หากเป็นค่าลบจะไม่มีการ จำกัด จำนวนฟิลด์ที่ส่งคืนและฟิลด์ null ที่ต่อท้ายจะไม่ถูกระงับ


-1
"12345".each_char.map(&:to_i)

each_charทำโดยพื้นฐานเหมือนกับsplit(''): มันแยกสตริงเป็นอาร์เรย์ของอักขระ

อืมฉันเพิ่งรู้แล้วว่าในคำถามเดิมสตริงมีเครื่องหมายจุลภาคดังนั้นคำตอบของฉันไม่เป็นประโยชน์จริง ๆ ;-( ..


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