在 Ruby 中按布尔值对对象进行排序
如果这个问题之前已经被回答过或者是显而易见的,我很抱歉...在这里和谷歌上进行了一些搜索,但找不到答案。
我正在寻找按价格对一组提供商进行排序以及它们是否是首选提供商? (正确或错误)
例如在提供者的数组 p 中...
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
有关解决此问题的更好方法的任何建议?
My apologies if this has been answered before or is obvious...did some searching here and on the Goog and couldn't find an answer.
I'm looking to sort an array of Providers by price and whether they are a preferred_provider? (true or false)
For instance in 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
I would like to p.sort_by and get:
[p2 p3 p1]
IAW
p.sort_by {|x| x.preferred_provider?, x.price }
does not work and gets...
undefined method `<=>' for false:FalseClass
Any suggestions on better ways to approach this problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
大多数语言都提供接受此类事物的比较器的排序函数。 在 Ruby 中,这只是 array.sort:
Most languages provide sort functions that accept comparators for this sort of thing. In Ruby, this is just array.sort:
您可以在
Provider
类上定义<=>
来执行您想要的操作,然后使用Array.sort
方法进行排序(而不是Enumerable.sort_by
)。 这是我编写的<=>
的定义:然后,如果您有数组
p
,则可以执行p_sorted = p.sort< /代码>。
(请注意,我尚未测试此代码,因此可能存在一些错误,但我认为它可以证明这个想法。)
You could define a
<=>
on theProvider
class to do what you want, and then sort using theArray.sort
method (rather thanEnumerable.sort_by
). Here's a definition of<=>
that I whipped up:Then, if you have your array
p
, you could just dop_sorted = p.sort
.(Note that I haven't tested this code, so there may be a few errors, but I think it serves to demonstrate the idea.)