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

السؤال

Recommended Posts

  • 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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...