التابع String.split في روبي

من موسوعة حسوب
< Ruby‏ | String
مراجعة 19:45، 27 مارس 2019 بواسطة جميل-بيلوني (نقاش | مساهمات) (إنشاء الصفحة.)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

يُقسِّم التابع split السلسلة النصية التي استدعي معها إلى سلاسل نصية فرعية اعتمادًا على فاصل محدَّد ثم يعيد تلك السلاسل الفرعية في مصفوفة.

البنية العامة

scan(pattern)  array
scan(pattern) {|match, ...| block }  str

المعاملات

pattern

إن كان هذا المعامل سلسلة نصية، فستُسعمَل هذه السلسلة على أنَّها الفاصل الذي يفصل أجزاء السلسلة النصية المعطاة عن بعضها بعضًا. أمَّا إن كان هذا المعامل فراغًا واحدًا، فستُقسَّم السلسلة النصية المعطاة عند كل فراغ موجود بين كلماتها؛ وعند وجود أكثر من فراغ واحد، فستُتجاهل هذه الفراغات الزائدة.

وإن كان هذا المعامل تعبيرًا نمطيًّا، فستُقسَّم السلسلة النصية المعطاة عند كل تطابق مع هذا التعبير. كلما حصل تطابق مع سلسلة نصية معدومة الطول (zero-length string)، فستُقسَّم السلسلة النصية المعطاة إلى محارف فردية. إن احتوى النمط pattern على مجموعات، فستُعاد التطابقات المقابلة لكل مجموعة في المصفوفة أيضًا.

إن كانت قيمة هذا المعامل هي nil، فستُستعمَل قيمة ;$. وإن كانت قيمة ;$ هي nil (القيمة الافتراضية)، فستُقسَّم السلسلة النصية المعطاة عند كل مسافة بيضاء وكأنه استُعملَت القيمة ' ' تمامًا.

limit

إن حُذِف هذا المعامل، تُزال العناصر الفارغة (null) الزائدة من المصفوفة المعادة. وإن كان هذا المعامل عددًا موجبًا، فسيُمثِّل هذا العدد الحد الأقصى لعدد السلاسل النصية الفرعية المعادة (تُعاد المجموعات المتطابقة أيضًا ولا تُحسَب ضمن هذا الحد). أمَّا إن كانت قيمة هذا المعامل هي 1، فستُعاد السلسلة النصية بأكملها على أنَّها العنصر الوحيد في المصفوفة. وأخيرًا إن كان هذا المعامل عددًا سالبًا، لن يكون هنالك حدًّا لعدد العناصر المعادة ولن تُزَال العناصر الفارغة (null).

القيمة المعادة

تعاد مصفوفة تحوي السلاسل النصية الفرعية المفصولة بالفاصل المحدد بالمعامل pattern مع أخذ المعامل limit بالحسبان إن أعطي.

أمثلة

مثال على استعمال التابع split:

" now's  the time".split        #=> ["now's", "the", "time"]
" now's  the time".split(' ')   #=> ["now's", "the", "time"]
" now's  the time".split(/ /)   #=> ["", "now's", "", "the", "time"]
"1, 2.34,56, 7".split(%r{,\s*}) #=> ["1", "2.34", "56", "7"]
"hello".split(//)               #=> ["h", "e", "l", "l", "o"]
"hello".split(//, 3)            #=> ["h", "e", "llo"]
"hi mom".split(%r{\s*})         #=> ["h", "i", "m", "o", "m"]

"mellow yellow".split("ello")   #=> ["m", "w y", "w"]
"1,2,,3,4,,".split(',')         #=> ["1", "2", "", "3", "4"]
"1,2,,3,4,,".split(',', 4)      #=> ["1", "2", "", "3,4,,"]
"1,2,,3,4,,".split(',', -4)     #=> ["1", "2", "", "3", "4", "", ""]

"1:2:3".split(/(:)()()/, 2)     #=> ["1", ":", "", "", "2:3"]

"".split(',', -1)               #=> []

انظر أيضًا

  • التابع scan: يبحث عن نمط محدَّد ضمن السلسلة النصية التي استدعيت معه ويعيد النتائج المتطابقة في مصفوفة أو يمرِّرها إلى الكتلة المعطاة ويعيد الناتج الذي تعيده.
  • التابع slice: يجلب محرفًا ذا فهرس محدد، أو جزءًا محددًا ببداية وطول، أو مجالًا محددًا ببداية ونهاية من السلسلة النصية التي استدعيت معه.

مصادر