• 0

كيف تجد العنصر الأكثر تكرارا في مصفوفة معينة في روبي؟

هل هنالك دالة أو طريقة معينة في لغة روبي لتحديد العنصر الأكثر تكرارا في مصفوفة معينة؟
أمثلة على ما أريده (طبعا الأمثلة لا تعمل):

[1, 1, 1, 2, 3].mode
=> 1

['cat', 'dog', 'snake', 'dog'].mode
=> dog

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


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

هنالك طرق عديدة في لغة روبي لإيجاد العنصر الأكثر تكرارا في مصفوفة معين، فيمكنك على سبيل المثال بناء hash يدور حول عناصر المصفوفة ويسجل مرات تكرارها كما في المثال التالي:

arr = [1, 1, 1, 2, 3]

freq = arr.inject(Hash.new(0)) { |h,v| h[v] += 1; h }
#=> {1=>3, 2=>1, 3=>1}

وبعد ذلك يمكنك البحث عن العنصر الذي يملك أكبر عدد من التكرارات كما في المثال التالي:

arr.max_by { |v| freq[v] }
#=> 1

ومن الطرق الأخرى لإيجاد التكرارات هي عن طريق ترتيب المصفوفة حسب مرات تكراراها ومن ثم نحصل على العنصر الأخير منها كما في المثال التالي:

    sort_by {|i| grep(i).length }.last

كما يمكنك استخدام هذه الطريقة والتي تعتبر الأسرع مقارنة بالطريقتين السابقتين:

    freq = inject(Hash.new(0)) { |h,v| h[v] += 1; h }
    max = freq.values.max                   # we're only interested in the key(s) with the highest frequency
    freq.select { |k, f| f == max }         # extract the keys that have the max frequency

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


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

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

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

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


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

تسجيل الدخول

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


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