فرز الكائنات القيم المنطقية في روبي
-
05-09-2019 - |
سؤال
اعتذاري إذا تم الرد على ذلك من قبل أو هو واضح ... فعل بعض البحث هنا وعلى Goog ولم تتمكن من العثور على إجابة.
أنا أتطلع إلى فرز مجموعة من مقدمي الخدمات حسب السعر وما إذا كانت مفضلة _provider؟ (صحيحة أو خاطئة)
على سبيل المثال في array p of Providers
...
p1.price == 1, p1.preferred_provider? == false
p2.price == 2, p2.preferred_provider? == true
p2.price == 3, p3.preferred_provider? == true
أود أن P.Sort_by واحصل على:
[p2 p3 p1]
iaw.
p.sort_by {|x| x.preferred_provider?, x.price }
لا يعمل ويحصل ...
undefined method `<=>' for false:FalseClass
أي اقتراحات حول طرق أفضل للتعامل مع هذه المشكلة؟
المحلول
توفر معظم اللغات وظائف الفرز التي تقبل المقاسمون لهذا النوع من الأشياء. في روبي، هذا هو مجرد array.sort:
p.sort {|a, b| if (a.preferred_provider? == b.preferred_provider?
then a.price <=> b.price
elsif a.preferred_provider?
1
else -1
}
نصائح أخرى
يمكنك تحديد <=>
على ال Provider
فئة للقيام بما تريد، ثم فرز باستخدام Array.sort
الطريقة (بدلا من Enumerable.sort_by
). إليك تعريف <=>
أن أشعلت:
class Provider
def <=>(other)
if preferred_provider?
if other.preferred_provider?
@price <=> other.price
else
1
end
else
if other.preferred_provider?
-1
else
@price <=> other.price
end
end
end
end
ثم، إذا كان لديك صفيفك p
, ، يمكنك فقط القيام به p_sorted = p.sort
.
(لاحظ أنني لم أختبر هذا الرمز، لذلك قد يكون هناك عدد قليل من الأخطاء، لكنني أعتقد أنه يخدم إظهار الفكرة.)