التابع Enumerable.slice_after في روبي

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث

يقطِّع التابع slice_after عناصر الكائن القابل للتعداد إلى أجزاء تحدَّد نهايتها عبر نمطٍ محدِّدٍ أو كتلةٍ معطاةٍ ثم يعيد مُعدِّد لكل جزء من الأجزاء الناتجة.

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

slice_after(pattern)  an_enumerator
slice_after { |elt| bool }  an_enumerator

إن كان النمط مطابقًا للعنصر (أي يعيد pattern === elt القيمة true) أو أعادت الكتلة القيمة true للعنصر المُمرَّر إليها، فسيُعدُّ العنصر نهايةً لجزء. يُستدعَى المعامل === والكتلة block من أول عنصر وحتى آخر عنصر من عناصر الكائن القابل للتعداد المعطى. يُنتِج المُعدِّد المعاد العناصر المُجزَّأة كمصفوفة. لذلك، يمكن استدعاء التابع each بالشكل التالي:

enum.slice_after(pattern).each { |ary| ... }
enum.slice_after { |elt| bool }.each { |ary| ... }

يمكن أيضًا استعمال توابع الصنف Enumerator والوحدة Enumerable مثل التابع map وغيره.

المعاملات

pattern

النمط المراد مطابقته للعناصر لتحديد نهايات الأجزاء المراد تقطيع عناصر الكائن المعطى إليها.

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

يعاد مُعدِّد لكل جزء من الأجزاء المُقطَّعة.

أمثلة

مثال على تجميع أسطر مستمرة باستعمال التابع slice_after:

lines = ["foo\n", "bar\\\n", "baz\n", "\n", "qux\n"]
e = lines.slice_after(/(?<!\\)\n\z/)
p e.to_a
#=> [["foo\n"], ["bar\\\n", "baz\n"], ["\n"], ["qux\n"]]
p e.map {|ll| ll[0...-1].map {|l| l.sub(/\\\n\z/, "") }.join + ll.last }
#=>["foo\n", "barbaz\n", "\n", "qux\n"]

انظر أيضًا

  • التابع chunk: يُمرِّر كل عنصر من عناصر المجموعة التي استدعيت معه إلى الكتلة المعطاة ثمَّ يُقطِّعها إلى أجزاء (قطع صغيرة) بحسب القيمة المعادة من الكتلة.
  • التابع reduce: يجمع جميع عناصر الكائن القابل للتعداد الذي استدعي معه عبر تطبيق عملية ثنائية تُحدَّد بوساطة كتلة أو رمز يسمي تابعًا أو معاملًا.
  • التابع slice_before: يقطِّع عناصر الكائن القابل للتعداد إلى أجزاء تحدَّد بدايتها عبر نمطٍ محدِّدٍ أو كتلةٍ معطاةٍ ثم يعيد مُعدِّد لكل جزء من الأجزاء الناتجة.
  • التابع slice_when: يقطِّع عناصر الكائن القابل للتعداد إلى أجزاء تحدَّد بدايتها عبر كتلةٍ معطاةٍ ثم يعيد مُعدِّد لكل جزء من الأجزاء الناتجة.

مصادر