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

السؤال

نشر

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

['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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...