如果此之前已经回答或很明显,我很抱歉...在这里和GOOG上进行了一些搜索,找不到答案。

我希望按价格按价格分类,以及它们是否是Preferred_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

关于更好的方法来解决此问题的任何建议吗?

有帮助吗?

解决方案

大多数语言都提供了接受的排序功能 比较器 对于这种事情。在Ruby中,这只是阵列。

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