اذهب إلى المحتوى

السؤال

نشر

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

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

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

[0, 1, 3, 4, 5]

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

Recommended Posts

  • 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]

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...