在 Ruby 中使用对象的属性对对象列表进行排序

2023-11-24

我有一个清单Fruit结构体称为basket. Each Fruit结构体有一个name(一个字符串)和一个calories(一个整数)。我想排序basket以便:

  1. The Fruits 最高的calories首先出现。例如,500 卡路里的水果出现在 400 卡路里的水果之前。

  2. If two Fruits 具有相等的calories, the Fruit whose name按字母顺序排在第一位,忽略大小写。例如,给定两种卡路里相同的水果,一种名为“香​​蕉”的水果将排在一种名为“柑橘”的水果之前。

的定义Fruit不是我控制的东西,所以我更喜欢一个不涉及混合任何东西的解决方案Fruit或改变它。这可能吗?


简单的解决方案是

basket.sort_by { |f| [-f.calories, f.name] }

当然,如果这是the水果的规范排序顺序然后它should被定义为使用<=>方法并与Comparable模块混入Fruit

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Ruby 中使用对象的属性对对象列表进行排序 的相关文章

随机推荐