الفرق بين المراجعتين لصفحة: «Ruby/Enumerable/chunk while»
جميل-بيلوني (نقاش | مساهمات) إنشاء الصفحة. |
جميل-بيلوني (نقاش | مساهمات) |
||
سطر 37: | سطر 37: | ||
*التابع <code>[[Ruby/Enumerable/chunk|chunk]]</code>: يُمرِّر كل عنصر من عناصر المجموعة التي استدعيت معه إلى الكتلة المعطاة ثمَّ يُقطِّعها إلى أجزاء (قطع صغيرة) بحسب القيمة المعادة من الكتلة. | *التابع <code>[[Ruby/Enumerable/chunk|chunk]]</code>: يُمرِّر كل عنصر من عناصر المجموعة التي استدعيت معه إلى الكتلة المعطاة ثمَّ يُقطِّعها إلى أجزاء (قطع صغيرة) بحسب القيمة المعادة من الكتلة. | ||
*التابع <code>[[Ruby/Enumerable/drop while|drop_while]]</code>: يحذف العناصر الأولى المحقِّقة لشرط معيِّن من المُعدِّد المعطى ثم يعيد مصفوفة تحوي العناصر المتبقية. | *التابع <code>[[Ruby/Enumerable/drop while|drop_while]]</code>: يحذف العناصر الأولى المحقِّقة لشرط معيِّن من المُعدِّد المعطى ثم يعيد مصفوفة تحوي العناصر المتبقية. | ||
* التابع <code>slice_when</code>: يقطِّع عناصر الكائن القابل للتعداد إلى أجزاء تحدَّد بدايتها عبر كتلةٍ معطاةٍ ثم يعيد <nowiki/>[[Ruby/Enumerator|مُعدِّد]] لكل جزء من الأجزاء الناتجة. | |||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/Enumerable.html#method-i-chunk_while قسم التابع chunk_while في الصنف Enumerable في توثيق روبي الرسمي.] | *[http://ruby-doc.org/core-2.5.1/Enumerable.html#method-i-chunk_while قسم التابع chunk_while في الصنف Enumerable في توثيق روبي الرسمي.] |
المراجعة الحالية بتاريخ 18:02، 30 ديسمبر 2018
ينشئ التابع chunk_while
مُعدِّدًا لكل جزء من العناصر المجمَّعة سويةً. تُعرَّف بداية الأجزاء (chunks) عبر الكتلة المعطاة.
البنية العامة
chunk_while {|elt_before, elt_after| bool } → an_enumerator
يفصل هذا التابع كل جزء باستعمال العناصر المتجاورة، التي هي elt_before
و elt_after
، في المُعدِّد المستقبل. يفصل هذا التابع الأجزاء بين elt_before
و elt_after
حيث تعيد الكتلة القيمة false
.
تُستدعَى الكتلة مع طول المُعدِّد المستقبل مطروحًا منه الواحد.
ينتج عن المُعدِّد الناتج العناصر المجمَّعة كمصفوفة. لذلك، يمكن استدعاء التابع each
بالشكل التالي:
enum.chunk_while { |elt_before, elt_after| bool }.each { |ary| ... }
يمكن استعمال توابع أخرى من الوحدة Enumerator
و Enumerable
أيضًا مثل to_a
، و map
...إلخ.
القيمة المعادة
يعاد المُعدِّد الناتج الذي ينتج عنه (yield) العناصر المجمَّعة كمصفوفة.
أمثلة
استعمال التابع chunk_while
لتجميع سلسلة الأعداد الفرعية المتزايدة مباشرةً بمقدار 1سويةً:
a = [1,2,4,9,10,11,12,15,16,19,20,21]
b = a.chunk_while {|i, j| i+1 == j }
p b.to_a #=> [[1, 2], [4], [9, 10, 11, 12], [15, 16], [19, 20, 21]]
c = b.map {|a| a.length < 3 ? a : "#{a.first}-#{a.last}" }
p c #=> [[1, 2], [4], "9-12", [15, 16], "19-21"]
d = c.join(",")
p d #=> "1,2,4,9-12,15,16,19-21"
السلسلة الفرعية المتزايدة (وليس المتناقصة) يمكن أن تُجمَّع بالشكل التالي:
a = [0, 9, 2, 2, 3, 2, 7, 5, 9, 5]
p a.chunk_while {|i, j| i <= j }.to_a
#=> [[0, 9], [2, 2, 3], [2, 7], [5, 9], [5]]
يمكن أيضًا تجميع الأعداد الزوجية والفردية المتجاورة على النحو التالي (يمكن استعمال التابع chunk
لأداء الوظيفة نفسها):
a = [7, 5, 9, 2, 0, 7, 9, 4, 2, 0]
p a.chunk_while {|i, j| i.even? == j.even? }.to_a
#=> [[7, 5, 9], [2, 0], [7, 9], [4, 2, 0]]
يستطيع التابع slice_when
القيام بالأمر نفسه باستثناء التقطيع (الفصل) عندما تعيد الكتلة القيمة true
عوضًا عن القيمة false
.
انظر أيضًا
- التابع
chunk
: يُمرِّر كل عنصر من عناصر المجموعة التي استدعيت معه إلى الكتلة المعطاة ثمَّ يُقطِّعها إلى أجزاء (قطع صغيرة) بحسب القيمة المعادة من الكتلة. - التابع
drop_while
: يحذف العناصر الأولى المحقِّقة لشرط معيِّن من المُعدِّد المعطى ثم يعيد مصفوفة تحوي العناصر المتبقية. - التابع
slice_when
: يقطِّع عناصر الكائن القابل للتعداد إلى أجزاء تحدَّد بدايتها عبر كتلةٍ معطاةٍ ثم يعيد مُعدِّد لكل جزء من الأجزاء الناتجة.