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

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

MaxReve

السؤال

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

['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}]

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 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.">

المصدر

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...