在Ruby中按布尔值对对象排序

Kev*_*alt 3 ruby sorting boolean ruby-on-rails enumerable

如果以前已经回答过或者很明显,我很抱歉...在这里和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
Run Code Online (Sandbox Code Playgroud)

我想p.sort_by并得到:

[p2 p3 p1]
Run Code Online (Sandbox Code Playgroud)

IAW

p.sort_by {|x| x.preferred_provider?, x.price }
Run Code Online (Sandbox Code Playgroud)

不起作用,得到......

undefined method `<=>' for false:FalseClass
Run Code Online (Sandbox Code Playgroud)

关于更好地解决这个问题的方法的任何建议?

Dav*_*low 8

大多数语言都提供排序函数,可以接受这类事物的比较器.在Ruby中,这只是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
       }
Run Code Online (Sandbox Code Playgroud)