سؤال

اعتذاري إذا تم الرد على ذلك من قبل أو هو واضح ... فعل بعض البحث هنا وعلى 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.

(لاحظ أنني لم أختبر هذا الرمز، لذلك قد يكون هناك عدد قليل من الأخطاء، لكنني أعتقد أنه يخدم إظهار الفكرة.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top