• 0

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

لدي مصفوفة مرتبة كالتالي:

['FATAL <error title="Request timed out.">',
'FATAL <error title="Request timed out.">',
'FATAL <error title="There is insufficient system memory to run this query.">']

أريد الحصول على عدد تكرارات كل عنصر كما في هذا المثال (لا يجب أن تكون من نوع hash):

[{:error => 'FATAL <error title="Request timed out.">', :count => 2}
{:error => 'FATAL <error title="There is insufficient system memory to run this query.">', :count => 1}]

فما طريقة فعل ذلك؟

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


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

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

# sample array
a=["aa","bb","cc","bb","bb","cc"]

# make the hash default to 0 so that += will work correctly
b = Hash.new(0)

# iterate over the array, counting duplicate entries
a.each do |v|
  b[v] += 1
end

b.each do |k, v|
  puts "#{k} appears #{v} times"
end

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

a = ['FATAL <error title="Request timed out.">',
      'FATAL <error title="Request timed out.">',
      'FATAL <error title="There is insufficient ...">']

b = a.inject(Hash.new(0)) {|h,i| h[i] += 1; h }

b.to_a.each {|error,count| puts "#{count}: #{error}" }

وسيكون الناتج كما في المثال التالي:

1: FATAL <error title="There is insufficient ...">
2: FATAL <error title="Request timed out.">

المصدر

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


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

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

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

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


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

تسجيل الدخول

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


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