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

السؤال

نشر

لدي المصفوفة التالي:

[
  { :foo => 'foo', :bab => 2 },
  { :foo => 'foo', :bab => 3 },
  { :foo => 'foo', :bab => 5 },
]

أريد أن أقوم بفرز هذه المصفوفة تنازليا حسب قيمة :bab في كل سطر، فما هي أفضل طريقة للفرز ؟

Recommended Posts

  • 0
نشر

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

a.sort{|a,b| b[:bab] <=> a[:bab]}

أو يمكنك أيضا استخدام التابع sort_by لترتيب عناصر المصفوفة تصاعديا ومن ثم تقوم باستخدام .reverse! لإعادة ترتيبها بشكل تنازلي كما في المثال التالي:

a.sort_by { |h| h[:bab] }.reverse!

كما يمكنك أيضا استخدام هذه الطريقة السهلة لترتيب العناصر بشكل تنازلي كما في المثال التالي:

 a.sort {|x,y| y[:bab]<=>x[:bab]}

حيث ستكون النتيجة بعد تنفيذ هذا السطر شبيه بهذه:

irb
>> a = [
?>   { :foo => 'foo', :bar => 2 },
?>   { :foo => 'foo', :bar => 3 },
?>   { :foo => 'foo', :bar => 5 },
?> ]
=> [{:bar=>2, :foo=>"foo"}, {:bar=>3, :foo=>"foo"}, {:bar=>5, :foo=>"foo"}]

>>  a.sort {|x,y| y[:bar]<=>x[:bar]}
=> [{:bar=>5, :foo=>"foo"}, {:bar=>3, :foo=>"foo"}, {:bar=>2, :foo=>"foo"}]

المصدر

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...