• 0

كيف أحصل على أرقام القيّم الأقل من عدد ما في مصفوفة روبي؟

لديّ مصفوفة في روبي تحتوي على عدّة قيم، وأرغب بالحصول على أرقام القيّم الأقل من عدد ما، مثلا 21، بحيث يكون المخرج جميع أرقام القيم الأصغر من 21:

a=[10,20,30,10,3,2,200]

المُخرج سيكون كالتّالي:

[0, 1, 3, 4, 5]

فكيف يُمكن القيّام بذلك؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

يُمكن الحصول على النّتيجة المرغوبة بعدّة طرق منها:

1. استعمال التّابع size.times.with_object مع جملة شرطيّة كالتّالي:

a.size.times.with_object([]) { |i,b| b << i if a[i] < 21 }

2. استعمال size.times.map:

a.size.times.map { |i| a[i] < 21 ? i : nil }.compact

3. استعمال التّابع  zip:

a.zip( Array(0...a.size) ).select { |e,_| e < 21 }.map(&:last)

4.  استعمال التّابع reduce

a.reduce([[],0]) { |(b,i),e| [e < 21 ? b << i : b, i + 1] }.first

5. استخدام  each_with_object

 a.each_with_object([]) {|e,a| a << (e.to_i < 21 ? a.size : nil) }.compact

6.  استخدام التّعابير القيّاسية مع توابع المصفوفات:

a.join(',').gsub(/(\d+)/) { |e| (e.to_i < 21) ? $`.count(',') : nil } \
           .gsub(',,',',').split(',').map(&:to_i)

جميع الطّرق أعلاه ترجع نفس القيمة:

[0, 1, 3, 4, 5]

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن