Ruby告诉sort_by对不同的属性使用不同的顺序

时间:2016-03-03 20:02:33

标签: ruby sorting

这个问题与this question很相似。问题是由于某种原因我无法使用sort方法。我只能使用sort_by。所以,我需要找到一种方法来排序多个属性,但每个属性的顺序不同。

我能找到的最佳答案是 Gleen (找到here),但我担心它的性能,因为该对象被复制到@o = o中(请纠正我,如果假设它我错了。

我在想是否有办法临时存根<=>,同时将sort_by传递给我想要降序的属性@o = o。这可能吗?我也不想对对象进行任何永久性更改。此外,如果我必须创建一个新对象而不会产生不必要的开销(如<=>)到存根> a = [['a', 1], ['b', 2], ['b', 1]] > a.sort_by { |a| [decending(a[0]), a[1])] } => [['b', 1], ['b', 2], ['a', 1]] # This should sort the first value in descending # and the second in ascending order def decending(a) anything that would change stub <=> method for a end ,那么这也会很棒。

总结一下我希望拥有的行为如下:

sort_by

这是我能想到的一种方法。请随意建议任何与sort_by { |a| -a }一起使用的解决方案,并按不同的顺序按不同的属性排序。

此外,我不能做<=>之类的事情,因为我想要排序的东西不一定是数字。我想要的东西不仅可以用于字符串,还可以用于定义@o = o的任何对象。

修改 事实证明,在假设"SELECT date(Time_T), AVG(reading) AS reading_avg, MIN(reading) AS reading_min, MAX(reading) AS reading_max FROM readings WHERE (Zeitpunkt_T > '2016-02-20') GROUP BY (SELECT date(Time_T))" 复制对象并且价格不贵时,我显然是错误的。但我希望那里有更好的解决方案。一个问题是创建这么多对象可能会造成GC瓶颈。

0 个答案:

没有答案